Hallo Chris,
danke für dein Schubs!
Ich wende nun folgende Funktion, weil
a) ich einen "Erfolgsrückgabewert" benötige (ob es den "Root"-Knoten überhaupt gibt)
b) ich die 3 benötigten Knoten dynamisch übergeben muss
c) es mehrere Knoten mit gleichen Namen geben kann (deswegen die Schleife)
Delphi-Quellcode:
FUNCTION Tfrm_Main.XML_DOM_durchsuchen(my_XML_Stream: TStringStream;
CONST mein_Root:
STRING;
CONST vorgelagerter_Knoten:
STRING;
CONST zu_suchender_Knoten:
STRING): Boolean;
VAR
xNode: IXMLNode;
xXMLDoc: IXMLDocument;
i: Integer;
BEGIN
i := 0;
Memo_tmp.Clear;
xXMLDoc := newXMLDocument;
xXMLDoc.LoadFromStream(my_XML_Stream);
xXMLDoc.Active := true;
xNode := xXMLDoc.DocumentElement.ChildNodes[mein_Root];
WHILE Assigned(xNode)
DO
BEGIN
TRY
BEGIN
FOR i := 0
TO xNode.ChildNodes[vorgelagerter_Knoten].ChildNodes[zu_suchender_Knoten].ChildNodes.Count - 1
DO
IF xNode.ChildNodes[vorgelagerter_Knoten].ChildNodes[i].IsTextElement
THEN
BEGIN
Memo_tmp.Lines.Add(xNode.ChildNodes[vorgelagerter_Knoten].ChildNodes[zu_suchender_Knoten].Text);
END;
END;
EXCEPT
ON E:
Exception DO
BEGIN
END;
END;
xNode := xNode.NextSibling;
// zum nächsten Unter-Knoten gehen
END;
Result := Assigned(xNode);
END;
Allen einen schönen Tag noch!