Thema: XML Einlesen

Einzelnen Beitrag anzeigen

CVi

Registriert seit: 21. Nov 2010
15 Beiträge
 
#1

XML Einlesen

  Alt 8. Jul 2020, 12:59
Hallo,
habe folgendes problem mit dem einlesen von xml dateien und komme da irgendwie nicht weiter.

Beide (Kopf) werden korrekt eingelesen.
Positionen nimmt er grundsätzlich nur die von dem ersten Kopf ?!

kann mir jemand einen entscheidenen hinweis geben?
sicherlich nur eine kleinigkeit, aber ich komme nicht drauf




Nachfolgend die XML-Datei

Code:
<?xml version="1.0" encoding="ISO-8859-1"?>
<XML-Orders>
   <Kopf>
      <Kontonummer>10001</Kontonummer>
      <Name>Kunde1</Name>
      <Strasse>Hauptstrasse 22</Strasse>
      <POSITION>
         <PosNr>001</PosNr>
         <ArtikelNr>4711</ArtikelNr>
         <Artikelbezeichnung>Artikel1</Artikelbezeichnung>
      </POSITION>
      <POSITION>
         <PosNr>002</PosNr>
         <ArtikelNr>4712</ArtikelNr>
         <Artikelbezeichnung>Artikel2</Artikelbezeichnung>
      </POSITION>
      <POSITION>
         <PosNr>003</PosNr>
         <ArtikelNr>4713</ArtikelNr>
         <Artikelbezeichnung>Artikel3</Artikelbezeichnung>
      </POSITION>
      <POSITION>
         <PosNr>004</PosNr>
         <ArtikelNr>4714</ArtikelNr>
         <Artikelbezeichnung>Artikel4</Artikelbezeichnung>
      </POSITION>
      <POSITION>
         <PosNr>005</PosNr>
         <ArtikelNr>4715</ArtikelNr>
         <Artikelbezeichnung>Artikel5</Artikelbezeichnung>
      </POSITION>
      <POSITION>
         <PosNr>006</PosNr>
         <ArtikelNr>4716</ArtikelNr>
         <Artikelbezeichnung>Artikel6</Artikelbezeichnung>
      </POSITION>
   </Kopf>
   <Kopf>
      <Kontonummer>10002</Kontonummer>
      <Name>Kunde2</Name>
      <Strasse>Schulstrasse 40</Strasse>
      <POSITION>
         <PosNr>001</PosNr>
         <ArtikelNr>4717</ArtikelNr>
         <Artikelbezeichnung>Artikel7</Artikelbezeichnung>
      </POSITION>
      <POSITION>
         <PosNr>002</PosNr>
         <ArtikelNr>4718</ArtikelNr>
         <Artikelbezeichnung>Artikel8</Artikelbezeichnung>
      </POSITION>
      <POSITION>
         <PosNr>003</PosNr>
         <ArtikelNr>4719</ArtikelNr>
         <Artikelbezeichnung>Artikel9</Artikelbezeichnung>
      </POSITION>
   </Kopf>
</XML-Orders>

Nachfolgend mein Code:

Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
var
  Doc: IXMLDocument;
  Data: IXMLNode;
  Node: IXMLNode;
  I, E: Integer;
begin
  Memo2.Clear;
  Doc := LoadXMLDocument('test.xml');
  Data := Doc.DocumentElement;
  for I := 0 to Data.ChildNodes.Count-1 do
  begin
    Node := Data.ChildNodes[I];
    if Node.NodeName = 'Kopfthen
    begin
      Memo2.Lines.Add(Node.ChildNodes['Kontonummer'].NodeValue);
      Memo2.Lines.Add(Node.ChildNodes['Name'].NodeValue);
      Memo2.Lines.Add(Node.ChildNodes['Strasse'].NodeValue);
      //Positionen anfang
      Node := Doc.DocumentElement.ChildNodes['Kopf'].ChildNodes['POSITION'];
      while Assigned(Node) do
      begin
        Memo2.Lines.Add(Node.ChildNodes['PosNr'].NodeValue);
        Memo2.Lines.Add(Node.ChildNodes['ArtikelNr'].NodeValue);
        Memo2.Lines.Add(Node.ChildNodes['Artikelbezeichnung'].NodeValue);
        Node := Node.NextSibling;
      end;
      //Positionen ende
    end;
  end;
end;

Nachfolgend mein (falsches) ergebnis:

Code:
10001
Kunde1
Hauptstrasse 22
001
4711
Artikel1
002
4712
Artikel2
003
4713
Artikel3
004
4714
Artikel4
005
4715
Artikel5
006
4716
Artikel6

10002
Kunde2
Schulstrasse 40
// ab hier liest er wieder nur die zu dem ersten Kopf gehörigen Positionen ein ?
001
4711
Artikel1
002
4712
Artikel2
003
4713
Artikel3
004
4714
Artikel4
005
4715
Artikel5
006
4716
Artikel6
  Mit Zitat antworten Zitat