Avatar billede blod_1 Nybegynder
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>
Avatar billede arne_v Ekspert
10. maj 2009 - 21:45 #1
Avatar billede blod_1 Nybegynder
10. maj 2009 - 22:23 #2
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
%>
Avatar billede blod_1 Nybegynder
10. maj 2009 - 22:33 #3
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
Avatar billede blod_1 Nybegynder
10. maj 2009 - 22:41 #4
Okay... gjorde det mere besværlig end det egentligt var... Fandt ud af det, skulle bare være dj istedet for djlist
Avatar billede blod_1 Nybegynder
10. maj 2009 - 23:16 #5
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
%>
Avatar billede arne_v Ekspert
10. maj 2009 - 23:25 #6
Tricket er:

doc.LoadXml(objWinHttp.ResponseText)

Load loader fra en fil mens LoadXml loader en streng med XML.
Avatar billede blod_1 Nybegynder
10. maj 2009 - 23:37 #7
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
Avatar billede arne_v Ekspert
10. maj 2009 - 23:43 #8
jeg smidet et svar så
Avatar billede blod_1 Nybegynder
11. maj 2009 - 01:16 #9
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
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