10. maj 2009 - 21:09
Der er
8 kommentarer og 1 løsning
Læse XML med ASP
Jeg har noget XML som ser ud som dette, og det står jeg og skal have ind i noget asp istedet. Hvordan får jeg den til at læse det? Skal bruge navn, password, priority og enabled fra begge imellem <dj> tagsne. Lige som når en database læser igennem indtil der ikke er flere. <?xml version="1.0" encoding="UTF-8" ?> <response seq="45"> <data> <djlist> <dj> <name>bld</name> <password>mypass</password> <priority>0</priority> <enabled>1</enabled> </dj> <dj> <name>bld2</name> <password>mypass</password> <priority>0</priority> <enabled>1</enabled> </dj> </djlist> </data> </response>
Annonceindlæg fra Computerworld
Jeg har prøvet at modificere på den, men kan ikke få det til at fungere. Får denne fejl Microsoft VBScript runtime error '800a01a8' Object required: '' /xml.asp, line 20 indholdet i temp.xml er <?xml version="1.0" encoding="UTF-8" ?><response seq="45"><data><djlist><dj><name>bld</name><password>djpass</password><priority>0</priority><enabled>1</enabled></dj></djlist></data></response> og linie 20 er For Each elm in djlist.ChildNodes <%@ Language="VBScript" %> <% ' opret DOM træ Set doc = CreateObject("MSXML.DOMDocument") ' indlæs XML fil i DOM træ doc.Async = False doc.Load(Server.MapPath("temp.xml")) ' find alle medlem elementer Set medlemmer = doc.GetElementsByTagName("djlist") For Each dj in medlemmer Response.Write "<tr>" & vbCrLf ' find alle under elementer For Each elm in djlist.ChildNodes ' find under element navn If(elm.NodeName = "name") Then navn = elm.FirstChild.NodeValue Next ' udskriv de fundne under elementer Response.Write "<td>" & navn & "</td>" & vbCrLf Response.Write "</tr>" & vbCrLf Next ' cleanup Set medlemmer = Nothing Set doc = Nothing %>
Fik fejlen væk, det var bare noget jeg havde overset... men den finder ikke det der står under name ' opret DOM træ Set doc = CreateObject("MSXML.DOMDocument") ' indlæs XML fil i DOM træ doc.Async = False doc.Load(Server.MapPath("temp.xml")) ' find alle medlem elementer Set medlemmer = doc.GetElementsByTagName("djlist") For Each dj in medlemmer Response.Write "<tr>" & vbCrLf ' find alle under elementer For Each elm in dj.ChildNodes ' find under element navn If(elm.NodeName = "name") Then navn = elm.FirstChild.NodeValue Next ' udskriv de fundne under elementer Response.Write "<td>" & navn & "</td>" & vbCrLf Response.Write "</tr>" & vbCrLf Next ' cleanup Set medlemmer = Nothing Set doc = Nothing
Okay... gjorde det mere besværlig end det egentligt var... Fandt ud af det, skulle bare være dj istedet for djlist
Så virker det, så kommer det svære bare.. nemlig at få det til at køre rigtigt... Problemet er at jeg poster til et program, som så retunerer xml på den side man får frem. Det får jeg så tilbage som objWinHttp.ResponseText Lige nu omgår jeg det ved at bruge to filer, en som sender til programmet, og så gemmer indholdet i temp.xml, men jeg ville selvfølgelig gerne have det hele ind i samme fil, og uden at gemme en fysisk fil på harddisken først. Her er det jeg har fået til at fungere, som så "bare" skal laves om til at den kan læse det direkte. Her er jeg så på fuldstændig bar bund, aner ikke hvad jeg skal lede efter for at komme videre. <%@ Language="VBScript" %> <% Server.Execute("xml_ListDJS.asp") 'Henter data og gemmer det på harddisken %> <% Set doc = CreateObject("MSXML.DOMDocument") doc.Async = False doc.Load(Server.MapPath("temp.xml")) Set medlemmer = doc.GetElementsByTagName("dj") For Each dj in medlemmer For Each elm in dj.ChildNodes If(elm.NodeName = "name") Then response.write ("Name: " & elm.FirstChild.NodeValue) end if Next Next Set medlemmer = Nothing Set doc = Nothing Server.Execute("xml_Cleanup.asp") 'Fjerner den overflødige fil igen %>
Tricket er: doc.LoadXml(objWinHttp.ResponseText) Load loader fra en fil mens LoadXml loader en streng med XML.
Ja for satan da!! :D Så er den lige i skabet! Så mangler ALT andet kun at blive lavet, men nu har jeg da måden at få dataen ud, og en måde at behandle den på. Tak for hjælpen
Så ramte jeg en mur alligevel... 1 <?xml version="1.0" encoding="UTF-8" ?> 2 <response seq="45"> 3 <data> 4 <eventlist> 5 <event type="playlist"> 6 <active>1</active> 7 <playlist loopatend="0" shuffle="0" priority="5"> 8 friday night special 9 </playlist> 10 <calendar starttime="16:00:00" duration="01:00:00" repeat="4" /> 11 </event> 12 <event type="dj"> 13 <active>0</active> 14 <dj>nick the stick</dj> 15 <calendar starttime="18:00:00" duration="01:00:00" repeat="4" /> 16 </event> 17 </eventlist> 18 </data> 19 </response> Her i er der en linie som hedder <calendar starttime="18:00:00" duration="01:00:00" repeat="4" /> hvor jeg kun kan få den til at skrive "Object doesn't support this property or method" når jeg forsøger at få værdierne ud der fra
Kurser inden for grundlæggende programmering