11. december 2003 - 23:08Der 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:
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
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..
' Create an xmlhttp object: Set xml = Server.CreateObject("Microsoft.XMLHTTP") ' Or, for version 3.0 of XMLHTTP, use: ' Set xml = Server.CreateObject("MSXML2.ServerXMLHTTP")
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?
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"..
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?
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..
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
Synes godt om
Ny brugerNybegynder
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.