Avatar billede mute Nybegynder
16. december 2002 - 22:59 Der er 8 kommentarer og
1 løsning

Problemer med at kalde en attribute fra ASP fil!

Nu har jeg brugt de sidste 2 dage på at løse dette lille problem. Det driller mig rimeligt! Først koden (det relevante):

---------------------- XML ----------------------
<block>
<dateline>
  <story.date norm="20021215T115000Z" />
</dateline>
<hl2>Dette skriver selve overskriften</hl2>
<p summary="true">Dette er en kort beskrivelse</p>
<p text="true">
  <p>Dette skriver selve broedteksten, afsnit 1</p>
  <p>Dette skriver selve broedteksten, afsnit 2</p>
  <p>Dette skriver selve broedteksten, afsnit 3</p>
</p>
</block>
--------------------------------------------------


---------------------- ASP ----------------------
set objxmlhttp = server.createobject("Microsoft.XMLHTTP")
set objxmldom = server.createobject("Microsoft.XMLDOM")
call objxmlhttp.open("get", "http://127.0.0.1/test.xml", false)
objxmlhttp.send
set objxmldom = objxmlhttp.responsexml
set characters = objxmldom.selectnodes("//block")
set strdate = objxmldom.selectnodes("//story.date")
set strtext = objxmldom.selectnodes("//p")
for i = 0 to characters.length - 1
  set character = characters(i)
  response.write "<b>dateline:</b> " & strdate(i).getattribute("norm") & "<br>"
  response.write "<b>hl2:</b> " & character.selectsinglenode("hl2").text & "<br>"
  response.write "<b>p:</b> " & strtext(i).getattribute ("text") & "<br>"
  set character = nothing
next
set strtext = nothing
set characters = nothing
set objxmlhttp = nothing
set objxmldom = nothing
--------------------------------------------------

Koden er muligvis bikset, men den virker. Lige pånær hvad der er mit spørgsmål. Hvordan i alverden kalder jeg <p text="true"> og udskriver alt deri. Eller <p summary="true"> for den sags skyld. Skriv endeligt gerne hvis det er "spasserkode" jeg har lavet ;-)
Avatar billede Slettet bruger
16. december 2002 - 23:46 #1
<p text="true"> kalder du sådan:
  .selectSingleNode("//p[@text = 'true']")

- Kort og godt :-)
/CS
Avatar billede mute Nybegynder
17. december 2002 - 00:28 #2
Det var faktisk nogenlunde korrekt, men jeg skulle gerne bibeholde de enkelte afsnits "afstand" i form af p'erne så det hele ikke bare bliver en stor smøre. Sådan her ser det ud som om den ignorere de p'er der er inde i <p text="true"> tagget.
Avatar billede mute Nybegynder
17. december 2002 - 00:28 #3
Der er iøvrigt ikkek fast 3 afsnit, der kan være både 1 og 30, det er forskelligt.
Avatar billede Slettet bruger
17. december 2002 - 01:45 #4
Okay så da :-)

Et array med <p>-tags indeni et <p text="true">:

Set arrPs = {object}.selectNodes["//p[@text = 'true']/p"]
For Ptag In arrPs
  Response.Write("<p>" & arrPs[Ptag].text & "</p>")
Next

- sådan cirka...

/CS
Avatar billede mute Nybegynder
17. december 2002 - 07:47 #5
Jeg tror vi er meget tæt på nu!

set arrps = character.selectnodes("//p[@text = 'true']/p")
for ptag In arrps
  response.write("<p>" & arrps[ptag].text & "</p>")
next

Generer denne fejl:

Error Type:
Microsoft VBScript compilation (0x800A03F3)
Expected '='
/Default.asp, line 23, column 9
for ptag In arrps
--------^
Avatar billede mute Nybegynder
17. december 2002 - 07:54 #6
for each ptag in arrps
response.write("<p>" & arrps(ptag).text & "</p>")
next
--------------------------
Error Type:
Microsoft VBScript runtime (0x800A000D)
Type mismatch: 'arrps'
/Default.asp, line 25
Avatar billede mute Nybegynder
17. december 2002 - 08:36 #7
Got it :D

  set arrps = character.selectnodes("p[@text='true']/p")
  for a = 0 to character.selectnodes("p[@text='true']/p").length-1
  response.write("<p>" & arrps(a).text & "</p>")
  next

Tak for hjælpen. Jeg har et andet spørgsmål til samme xml/asp script som jeg opretter en ny med.
Avatar billede Slettet bruger
17. december 2002 - 09:21 #8
Ups ja - jeg bruger altid J(ava)Script til ASP, så mit VB er lidt rustent :-)

Et lille optimeringstip:
Når du laver sådan en her:

set arrps = character.selectnodes("p[@text='true']/p")
  for a = 0 to character.selectnodes("p[@text='true']/p").length-1

-Så gør det sådan her i stedet for:

set arrps = character.selectnodes("p[@text='true']/p")
  for a = 0 to arrps.length-1

Det er faktisk hurtigere for processoren, og der er mindre risiko for at taste forkert...

/CS
Avatar billede mute Nybegynder
17. december 2002 - 09:24 #9
heh, det havde jeg gjort, så lige at det samme stod 2 gange, hvilket jo ikke er nødvendigt, men ellers tak :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester