Avatar billede jonbdk Nybegynder
11. december 2003 - 23:08 Der er 16 kommentarer og
2 løsninger

Parse en xml fil i asp

Hej jeg har en fil der ser ud som følger:
<?xml version="1.0"?>
<gpgga>
  <utcTime>113336.698</utcTime>
  <latitude>5552.2801</latitude>
  <nsIndicator>N</nsIndicator>
</gpgga>

Jeg vil gerne læse den igennem med asp så mit output bliver:

113336.698
5552.2801
N

Kan nogen hjælpe mig med det?
Avatar billede jonbdk Nybegynder
11. december 2003 - 23:11 #1
eller bare så jeg selv kan indsætte <br> mellem mine værdier og strukturere dem som jeg vil
Avatar billede thesurfer Nybegynder
11. december 2003 - 23:16 #2
Er der kun de 3 linier, eller kommer de igen med andre værdier?
Avatar billede jonbdk Nybegynder
11. december 2003 - 23:19 #3
Filen opdateres hele tiden.
Så skal jeg bare refreshe siden for at få de nye værdier (ps skal bruges til wap - så jeg kan se dem via mobiltelefon)
Ovenstående er kun et eksempel, med den rigtige struktur...
Der kan være flere værdier...
Jeg vil gerne parse en generel xml fil (alt inden for root) for alle tags
Avatar billede jonbdk Nybegynder
11. december 2003 - 23:23 #4
JEg kunne også gøre en del hvis jeg kunne finde dokumentationen på MICROSOFT.FreeThreadedXMLDOM
Avatar billede thesurfer Nybegynder
11. december 2003 - 23:26 #5
Du kan søge på MICROSOFT.FreeThreadedXMLDOM på www.google.com .. men jeg kender ikke noget til MICROSOFT.FreeThreadedXMLDOM.. Så jeg ville behandle de linier som almindelige strenge, og bruge Left og Mid..

Hvis taggene "utcTime, latitude, nsIndicator" kun forekommer 1 gang per load af filen, kan du øjes med at bruge Left og Mid til at få fat på det der står mellem <...> og </..>

Hvis de forekommer flere gange, skal du bruge en loop..

Du skal også hente hele html koden ned først.. og derefter parse det..
Avatar billede thesurfer Nybegynder
11. december 2003 - 23:29 #6
Et eksempel fra www.4Guysfromrolla.com , hvor en ekstern side hentes ned med XMLHTTP..

<%
  Response.Buffer = True
  Dim objXMLHTTP, xml

  ' Create an xmlhttp object:
  Set xml = Server.CreateObject("Microsoft.XMLHTTP")
  ' Or, for version 3.0 of XMLHTTP, use:
  ' Set xml = Server.CreateObject("MSXML2.ServerXMLHTTP")

  ' Opens the connection to the remote server.
  xml.Open "GET", "http://www.4Guysfromrolla.com/", False

  ' Actually Sends the request and returns the data:
  xml.Send

  'Display the HTML both as HTML and as text
  Response.Write "<h1>The HTML text</h1><xmp>"
  Response.Write xml.responseText 
%>
Avatar billede jonbdk Nybegynder
11. december 2003 - 23:30 #7
Den starter og slutter med et root element der hedder gppga eller gpgsa.
Derefter kommer et (forskelligt) antal elementer (aldrig navngivet ens)
Jeg ville nok foretrække at bruge en xml parser, men kan du komme med et (kort) kode eksempel hvor du bruger left og mid?
Avatar billede jonbdk Nybegynder
11. december 2003 - 23:32 #8
den kode fra 4guys henter hele siden - fedt eksempel - men bare ikke lige til det jeg skal bruge her :)
Min xml filer ligger lokalt
Avatar billede eagleeye Praktikant
11. december 2003 - 23:39 #9
et relativt simpelt eks, som kræver du læses hele filens indhold ind i en variable som hedder:  str


<%
str = "xml filens indhold"
iStart = InStr(1,str,"<utcTime>")
iSlut = InStr(iStart,str,"</utcTime>")
do while iStart > 0 and iSlut > 0
  utcTime = Mid(str,iStart+9,iSlut-iStart-9)

  iStart = InStr(1,str,"<latitude>")
  iSlut = InStr(iStart,str,"</latitude>")
  latitude = Mid(str,iStart+10,iSlut-iStart-10)

  iStart = InStr(1,str,"<nsIndicator>")
  iSlut = InStr(iStart,str,"</nsIndicator>")
  nsIndicator = Mid(str,iStart+13,iSlut-iStart-13)

  Response.Write "Data Fra Filen:<br>"
  Response.Write utcTime & "<br>"
  Response.Write latitude & "<br>"
  Response.Write nsIndicator & "<br>"

  str = mid(str,iSlut+13+7)
  iStart = InStr(1,str,"<utcTime>")
  iSlut = InStr(iStart+1,str,"</utcTime>")
loop
%>
Avatar billede thesurfer Nybegynder
11. december 2003 - 23:39 #10
Left og Mid er ligeglade om der står "gppga", "gpgsa" eller "hej".. De vil overhovedet ikke kigge på det.. XML koden betyder ingenting.. det er bare bogstaver og tal..
De tager det hele som en streng.. og jeg fortæller den at den skal hente det der står mellem:
<utcTime> og </utcTime>
<latitude> og </latitude>
<nsIndicator> og </nsIndicator>

Derfor skal jeg vide om de 3 linier, "<utc...", "<lat..." og "<nsI...", kommer igen og igen.. Hvis de gør, skal der bruges en loop.. ellers ikke..

Skal du bruge parseren til at hente andre værdier? Igen mener det jeg det der står mellem bestemte tags, og ikke "elementer"..
Avatar billede thesurfer Nybegynder
11. december 2003 - 23:40 #11
Nøjagtigt som eagleye har lavet det :)
Avatar billede jonbdk Nybegynder
11. december 2003 - 23:55 #12
jaaa det virker omend lidt bøvlet da antallet af variabler varierer med forskellige filer...
Kan man lave det generelt så jeg ikke skal angive istart og islut, men istedet angive hvad root er, og fortælle at den skal den ikke tage?
Avatar billede thesurfer Nybegynder
12. december 2003 - 16:15 #13
Du skal hen og definere hvilke tags du vil hente værdier fra..

Du kunne muligvis angive alle felterne i en array.. feks:

dim iStart, iSlut, tmp
dim tags, arrTags
tags = "utcTime;latitude;nsIndicator;osv..."
arrTags = split(tags, ";")

for i = LBound(arrTags) to UBound(arrTags) - 1
iStart = InStr(1,str,"<" & arrTags(i) & ">")
iSlut = InStr(iStart,str,"</" & arrTags(i) & ">")
tmp = Mid(str,iStart+len(arrTags(i),iSlut-iStart-len(arrTags(i))
... noget kode her ...
next

Og så kunne eagleeye lave sit fine script om til at bruge arrayen i stedet for.. :)


Ellers bliver der noget med..
* start

- find "<" og check om der står "/" eller "?" efter det

-- hvis der gør det

--- gå videre til næste linie ved at gå til start

-- ellers, find det næste "<"

--- find derefter det der står mellem "<" og ">", og brug det som navn_X

--- find derefter det der står mellem ">" og "</", og brug det som værdi_X til navn_X

loop gennem hele filen
* slut


Hvis dine XML filer indeholder mange værdier, men ikke for mange, kan du prøve at smide en fil herind.. det kan være at man får et bedre overblik, og derved bkiver det nemmere kunne løse dit problem..

/theSurfer.
Avatar billede jonbdk Nybegynder
19. januar 2004 - 11:34 #14
Thesurfer og eagleeye - smider I ikke nogen svar så jeg kan dele point ud?

Jon
Avatar billede thesurfer Nybegynder
19. januar 2004 - 16:24 #15
Det kan vi da godt.. hvis du altså kunne bruge det :)
Avatar billede eagleeye Praktikant
19. januar 2004 - 17:44 #16
;) jamen det gør vi da
Avatar billede eagleeye Praktikant
19. januar 2004 - 17:44 #17
...nu gør vi det...
Avatar billede jonbdk Nybegynder
19. januar 2004 - 18:46 #18
Det var ikke helt den løsning jeg gerne ville have haft, men den virkede til det den skulle - så det er bare super - mange tak for hjælpen
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

IT-JOB

Politiets Efterretningstjeneste

IT-løsningsarkitekt i PET

Forsvarsministeriets Materiel- og Indkøbsstyrelse

Solution Manager til Cyberdivisionen

Capgemini Danmark A/S

Client Partner