CC - XML import mit DOMdoc

11. Juli 2012 12:20

Hallo community,

ich habe folgendes Problem.
Ich muss ein XML-file Auslesen und Werte in eine Tablle schreiben.
Dies mache ich via DOMDocument, IXMLDOMNodeList und IXMLDOMNode.
Dies funktioniert wunderbar wenn ich nur ein Feld aus einem Element auslese.
Allerding benötige ich 2 Felder aus einem Element und der 2. Wert ist tiefer verschachtelt und leider auch nicht in jedem Element vorhanden. Wenn der 2. Wert nich vorhanden ist soll der Wert in der Tabelle leer bleiben.

Hier ein Codeausschnitt:

Ich habe Comments hinzugefügt die beschreiben was aktuell passiert und wie ich es gerne lösen würde. Leider finde ich keine Möglichkeit für die im Code beschriebene Prüfung auf die Existens des Feldes.

Code:
FOR i := 0 TO XMLNodeList.length - 1 DO BEGIN
  DOMNode := XMLNodeList.item(i);

  //Befüllen der NodeListe mit dem allen vorhandenen Elementen des Suchkriteriums   // 29 stk
  XMLNodeList2 := DOMNode.selectNodes('WAXUOMStructure/WAXLicensePlateId');

  FOR j := 0 TO XMLNodeList2.length - 1 DO BEGIN
    DOMNode2 := XMLNodeList2.item(j);

    IF NOT gt_WSMBatch.GET(DOMNode2.text) THEN BEGIN
      gt_WSMBatch."License No.":=DOMNode2.text;
      gt_WSMBatch.INSERT;
    END;    // dieser Teil wurde getestet und ist funktionsfähig

    //Befüllen der NodeListe mit dem allen vorhandenen Elementen des Suchkriteriums   // 28 stk
    XMLNodeList3 := DOMNode.selectNodes('WAXUOMStructure/WAXASNItem/InventDim/InventBatchId');

    //Hier muss geprüft werden ob in dem Element das Feld InventBatchId vorhanden ist. Variable k Wert von j zuweisen
        //wenn ja:    führe aus, Variable k + 1
        //wenn nein:  kein Eintrag in der Tabelle, Variable k nicht hochzählen

      //Auslesen des Listeninhalts der Nodes für jeden durchgang eines Elements 
      //29 Elemente existieren nur 28 in Liste FEHLER!!!     

      //DOMNode3 := XMLNodeList3.item(j);      fehlerhafte alte Lösung - Index out of Range
      DOMNode3 := XMLNodeList3.item(k);
      IF gt_WSMBatch.GET(DOMNode2.text) THEN BEGIN
        gt_WSMBatch."Batch No." := DOMNode3.text;
        gt_WSMBatch.MODIFY;
      END;

    //Ende Prüfung
  END;           


Weiß jemand wie ich das Prüfen kann oder kennt einen alternativen Lösungsweg?

Gruß Marco

Re: CC - XML import mit DOMdoc

12. Juli 2012 09:20

Das Problem wurde nun mit einem XMLport gelöst.