Avatar billede troelsm Nybegynder
10. juli 2008 - 13:46 Der er 7 kommentarer og
1 løsning

Læser indhold af en .xml fil - ikke alle "poster" kommer med ud

Jeg har et problem med at få alle poster med ud,
Med nedenstående kode og XML fil får jeg følgende ud - men der mangler en "post" - under hver empnr (Number i XML fil) kan der være en eller flere datoer - men jeg får kun den første med ud,
nogen som kan hjælpe med hvordan jeg kan få alle med ud?

*** Her er hvad jeg får ud
empnr 11562
kode EMS
startdato 2008-01-17
slutdato2008-01-17

empnr 11565
kode EMS
startdato 2008-01-24
slutdato2008-01-24

empnr 11567
kode EMS
startdato 2008-01-31
slutdato2008-01-31

*** Men jeg burde jo få dette ud

empnr 11562
kode EMS
startdato 2008-01-17
slutdato2008-01-17

empnr 11565
kode EMS
startdato 2008-01-24
slutdato2008-01-24

empnr 11565
kode EMS
startdato 2008-01-31
slutdato2008-01-31

empnr 11567
kode EMS
startdato 2008-01-31
slutdato2008-01-31


Min kode ser sådan ud
**** Kode start ****
    'Lav en instance af MS XML object:
    DIM objXMLDOM : Set objXMLDOM = CreateObject("microsoft.xmldom")
   
    DIM loadBool
    DIM objNodeList
    DIM objRootNode
   
    objXMLDOM.async = False   
   
    'Åben filen
      loadBool = objXMLDOM.load(Server.MapPath("\importxml.xml"))

IF loadBool=false Then
  response.write "Der findes ikke en import fil med det rigtige filnavn « importxml.xml » !"
ELSE     

Set Number      = objXMLDOM.getElementsByTagName("Number")
Set GndActCode = objXMLDOM.getElementsByTagName("GndActCode")
Set StartTime  = objXMLDOM.getElementsByTagName("StartTime")
Set EndTime    = objXMLDOM.getElementsByTagName("EndTime")

  'Now Iterate through the List and Display

  For i = 0 to (Number.Length-1)
    empnr         = Number.item(i).childNodes(0).text
    kode         = GndActCode.item(i).childNodes(0).text
    startdato     = left(StartTime.item(i).childNodes(0).text,10)
    slutdato    = left(EndTime.item(i).childNodes(0).text,10)

      response.write "<br>empnr  " & empnr
      response.write "<br>kode " & kode
      response.write "<br>startdato " & startdato
      response.write "<br>slutdato" & slutdato
  Next

END IF       

**** Kode slut  ****

Min XML fil ser sådan ud
**** XML start ****

    <GetOnActResponse>
      <GetOnActResponse>
        <OnAct>
          <OnAct>
            <Number>11562</Number>
            <Type>C</Type>
            <Forkort>OSL</Forkort>
            <ActDays>
              <ActDays>
                <GndActCode>EMS</GndActCode>
                <StartTime>2008-01-17T08:30:00</StartTime>
                <EndTime>2008-01-17T16:30:00</EndTime>
              </ActDays>
            </ActDays>
          </OnAct>
          <OnAct>
            <Number>11565</Number>
            <Type>C</Type>
            <Forkort>OSL</Forkort>
            <ActDays>
              <ActDays>
                <GndActCode>EMS</GndActCode>
                <StartTime>2008-01-24T08:30:00</StartTime>
                <EndTime>2008-01-24T16:30:00</EndTime>
              </ActDays>
              <ActDays>
                <GndActCode>EMS</GndActCode>
                <StartTime>2008-01-31T08:30:00</StartTime>
                <EndTime>2008-01-31T16:30:00</EndTime>
              </ActDays>
            </ActDays>
          </OnAct>
          <OnAct>
            <Number>11567</Number>
            <Type>C</Type>
            <Forkort>OSL</Forkort>
            <ActDays>
              <ActDays>
                <GndActCode>EMS</GndActCode>
                <StartTime>2008-01-10T08:30:00</StartTime>
                <EndTime>2008-01-10T16:30:00</EndTime>
              </ActDays>
            </ActDays>
          </OnAct>
      </OnAct>
        <Result>
          <Description>OK</Description>
          <Status>0</Status>
        </Result>
      </GetOnActResponse>
    </GetOnActResponse>

**** XML slut ****
Avatar billede w13 Novice
10. juli 2008 - 14:11 #1
Problemet er jo bare, at din kode ikke er beregnet til, at et "Number" har mere end én "ActDays". Så koden gør vel det, den er lavet til.
Avatar billede troelsm Nybegynder
10. juli 2008 - 15:16 #2
hmm ok
men kan du så fortælle mig hvordan je kan skrive den om så jeg kan få mere end en actdays med ud
Avatar billede arne_v Ekspert
11. juli 2008 - 04:20 #3
Til inspiration:

<%
Set doc = CreateObject("Microsoft.XMLDOM")
doc.Async = False 
doc.Load(Server.MapPath("importxml.xml"))
Response.Write "<ul>"
For Each n in doc.SelectNodes("//GetOnActResponse/GetOnActResponse/OnAct/OnAct")
    Response.Write "<li>" & n.SelectSingleNode("Number").Text & "</li>"
    Response.Write "<ul>"
    For Each nn in n.SelectNodes("ActDays/ActDays")
        Response.Write "<li>" & nn.SelectSingleNode("GndActCode").Text & " " & nn.SelectSingleNode("StartTime").Text & " " & nn.SelectSingleNode("EndTime").Text & "</li>"
    Next
    Response.Write "</ul>"
Next
Response.Write "</ul>"
Set doc = Nothing
%>
Avatar billede troelsm Nybegynder
14. juli 2008 - 17:52 #4
Hejsa arne_v
Drop lige et svar så smider jeg lige point.
Et enkelt ?
I min kode kun jeg med
IF loadBool=false Then
  response.write "Der findes ikke en import fil med det rigtige filnavn « importxml.xml » !"
ELSE 
test om der rent faktisk var - hvordan gør jeg det med din version af koden..
Avatar billede arne_v Ekspert
14. juli 2008 - 18:42 #5
svar
Avatar billede arne_v Ekspert
14. juli 2008 - 18:44 #6
Det kan du lave helt paa samme maade med min version.

Min version tester ikke paa retur vaerdi fra Load, men varedien er der jo.

Jeg fandt det bare mindre vigtigt for pointen.
Avatar billede troelsm Nybegynder
14. juli 2008 - 20:49 #7
det er også rigtigt - og det kan godt være at jeg er lidt langsom - men jeg synes ikke jeg kan teste for returværdien for load
Jeg vill jo synes det skulle være
if doc.Load
eller
if load
men ingen af disse virker,..
Avatar billede arne_v Ekspert
14. juli 2008 - 21:50 #8
som i din egen kode:

status = doc.Load(Server.MapPath("importxml.xml"))
If status Then
'
Else
'
End If
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