26. August 2024 13:40
XmlNodeList := XmlDoc.SelectNodes('//MITGLIEDNR');   // Anzahl der Rechnungsköpfe (=ParentNode) ermitteln (Knoten MITGLIEDNR kommt nur einmal je Rechnung vor).
FOR p:= 0 TO XmlNodeList.Count -1 DO BEGIN  // wir durchlaufen die Rechnungsköpfe 
    XmlNode := XmlDoc.SelectSingleNode('//key_'+ FORMAT(p) +'/MITGLIEDNR');
    loctxtMglNr := XmlNode.InnerText; //Inhalt des Knotens MITGLIEDNR im ParentNode ermitteln
    ChildNodeList := XmlNode.ChildNodes();  //Kinder des aktuellen ParentNode ermitteln  --> und das geht nicht!
    FOR i := 0 TO ChildNodeList.Count -1 DO BEGIN
      ChildNode := ChildNodeList.ItemOf(i);
      ChildNode := ChildNode.SelectSingleNode('//ARTIKEL');
      MESSAGE(ChildNode.InnerText);
    END;
END;
27. August 2024 13:45
PROCEDURE GetParentAndChildNodes@1();
VAR
    XmlDoc@2 : DotNet XmlDocument;
    XmlNodeList@3 : DotNet XmlNodeList;
    XmlNode@4 : DotNet XmlNode;
    ParentNode@5 : DotNet XmlNode;
    ChildNodeList@6 : DotNet XmlNodeList;
    ChildNode@7 : DotNet XmlNode;
BEGIN
    // XML-Dokument laden
    XmlDoc := XmlDoc.XmlDocument;
    XmlDoc.Load('C:\path\to\your\file.xml');
    // Alle 'key_0' Knoten auf der obersten Ebene finden
    XmlNodeList := XmlDoc.SelectNodes('//data/key_0');
    // Durch die Knoten navigieren
    FOR i := 0 TO XmlNodeList.Count - 1 DO BEGIN
        XmlNode := XmlNodeList.Item(i);
        ParentNode := XmlNode.ParentNode;
        MESSAGE('Parent Node Name: %1', ParentNode.Name);
        // Child-Nodes des aktuellen 'key_0' Knotens finden
        ChildNodeList := XmlNode.SelectNodes('key_0');
        // Durch die Child-Nodes navigieren
        FOR j := 0 TO ChildNodeList.Count - 1 DO BEGIN
            ChildNode := ChildNodeList.Item(j);
            MESSAGE('Child Node Name: %1, Value: %2', ChildNode.Name, ChildNode.InnerText);
        END;
    END;
END;