XML Daten in ein Array einlesen... und dann nur leeres Array !?

  • Hallo,

    Ich habe hier im Forum und bei Google auch schon gesucht und auch einen vielversprechenden ansatz entdeckt, meine abwandlung davon fördert nur leere Datenfelder im Array zu tage 8|

    Aus dieser XML Datei (nen Export aus nem Shopsystem), möchte ich ein paar Daten zur Buchführung herrausfischen, mit ner Messagebox klappt das Prima, nur mit dem Array in dem ich die Daten vor der weiterverarbeitung sammeln will, klappts garnicht, alles leer.

    Dazu habe ich zuerst das hier probiert:

    [autoit]


    #include <Array.au3>
    #include <_XMLDOMWrapper.au3>

    [/autoit][autoit][/autoit][autoit]

    $XML = FileOpenDialog("", @ProgramFilesDir & "\autoit", "XML (*.xml)", 1)
    $XMLopen = _XMLFileOpen($XML)
    ConsoleWrite("Debug: $iRET = " & $XMLopen & @LF)
    $XMLcount = _XmlGetNodeCount("Orders/Order")

    [/autoit][autoit][/autoit][autoit]

    For $i = 1 To $XMLcount
    $bestellnr = _XMLGetValue("Order[" & $i & "]/OrderNumber")
    $summe = _XMLGetValue("Order[" & $i & "]/GrandTotal")
    $datum = _XMLGetValue("Order[" & $i & "]/CreationDate")
    MsgBox(0,"",$datum[1] & " - " & $bestellnr[1] & " - " & $summe[1])
    Next

    [/autoit]

    Das funzt, in der MSGBox kommen die Daten sauber raus.

    Damit nicht:

    [autoit]


    #include <Array.au3>
    #include <_XMLDOMWrapper.au3>

    [/autoit][autoit][/autoit][autoit]

    $XML = FileOpenDialog("", @ProgramFilesDir & "\autoit", "XML (*.xml)", 1)
    $XMLopen = _XMLFileOpen($XML)
    ConsoleWrite("Debug: $iRET = " & $XMLopen & @LF)
    $XMLcount = _XmlGetNodeCount("Orders/Order")

    [/autoit][autoit][/autoit][autoit]

    Dim $arOrders[$XMLcount + 1][3]
    $arOrders[0][0] = 'B_Nr'
    $arOrders[0][1] = 'Euro'
    $arOrders[0][2] = 'Datum'

    [/autoit][autoit][/autoit][autoit]

    For $i = 1 To $XMLcount
    $arOrders[$i][0] = _XMLGetValue("Order[" & $i & "]/OrderNumber") ;bestellnr
    $arOrders[$i][1] = _XMLGetValue("Order[" & $i & "]/GrandTotal") ;gesamtpreis
    $arOrders[$i][2] = _XMLGetValue("Order[" & $i & "]/CreationDate") ;bestelldatum
    Next

    [/autoit][autoit][/autoit][autoit]

    _ArrayDisplay($arOrders)

    [/autoit]

    Kann mir das als einsteiger verständlich erklären warum das nicht funzen will ?(

    Danke

    Einmal editiert, zuletzt von MBNalbach (4. August 2012 um 21:56)

  • Schau dir doch mal das erste Script an, daraus geht doch eindeutig hervor, dass die Funktion _XMLGetValue ein Array zurückgibt, dessen 2tes Element du haben willst. Du versuchst die zurückgegebenen Arrays direkt in dein 2-dimensionales Array zu schreiben.
    Versuchs mal so:

    Spoiler anzeigen
    [autoit]

    #include <Array.au3>
    #include <_XMLDOMWrapper.au3>

    [/autoit] [autoit][/autoit] [autoit]

    $XML = FileOpenDialog("", @ProgramFilesDir & "\autoit", "XML (*.xml)", 1)
    $XMLopen = _XMLFileOpen($XML)
    ConsoleWrite("Debug: $iRET = " & $XMLopen & @LF)
    $XMLcount = _XmlGetNodeCount("Orders/Order")

    [/autoit] [autoit][/autoit] [autoit]

    Dim $arOrders[$XMLcount + 1][3]
    $arOrders[0][0] = 'B_Nr'
    $arOrders[0][1] = 'Euro'
    $arOrders[0][2] = 'Datum'

    [/autoit] [autoit][/autoit] [autoit]

    For $i = 1 To $XMLcount
    $aTemp = _XMLGetValue("Order[" & $i & "]/OrderNumber") ;bestellnr
    $arOrders[$i][0] = $aTemp[1]
    $aTemp = _XMLGetValue("Order[" & $i & "]/GrandTotal") ;gesamtpreis
    $arOrders[$i][1] = $aTemp[1]
    $aTemp = _XMLGetValue("Order[" & $i & "]/CreationDate") ;bestelldatum
    $arOrders[$i][2] = $aTemp[1]
    Next

    [/autoit] [autoit][/autoit] [autoit]

    _ArrayDisplay($arOrders)

    [/autoit]
  • Hallo,

    Hab ich glatt und sauber übersehen :sleeping:

    Danke dir für die Schnelle Hilfe :rock:

    Bis dann