Einzelnen Beitrag anzeigen

Benutzerbild von juergen
juergen

Registriert seit: 10. Jan 2005
Ort: Bönen
1.170 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: XML: Einstieg: Wie komme ich an die "richtigen" Werte?

  Alt 5. Aug 2019, 14:14
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!
Jürgen
Indes sie forschten, röntgten, filmten, funkten, entstand von selbst die köstlichste Erfindung: der Umweg als die kürzeste Verbindung zwischen zwei Punkten. (Erich Kästner)
  Mit Zitat antworten Zitat