Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   XML: XPath-Ausdruck gesucht (https://www.delphipraxis.net/202773-xml-xpath-ausdruck-gesucht.html)

juergen 7. Dez 2019 01:19

XML: XPath-Ausdruck gesucht
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo zusammen,

ich muss eine XML Datei verarbeiten (in eine Datenbank bringen).
Ich bin da schon ziemlich weit, momentan fehlt mir aber eine Möglichkeit Bilder aus bestimmten Knoten auszulesen. Innerhalb meiner ersten NodeList =>
Code:
x_NodeList_Hierarchie_1 := x_queryNode.SelectNodes(xXPath)  xXpath= '//Award/BoQ/BoQBody/BoQCtgy'
laufe ich der Reihe nach die Knoten "BoQCtgy" durch.
Und *innerhalb* dieser ersten Nodelist muss ich eine 2. Nodelist anwenden die dann die Bilder ausliest.

Da ich das Ganze nur schwer beschreiben kann, muss man sich wohl einmal mein Bild aus dem Anhang anschauen.

Wenn ich nachfolgenden XPath-Ausdruck anwende, erhalte ich alle Bilder aus *allen* "BoQCtgy"-Knoten.
Code:
//Award/BoQ/BoQBody/BoQCtgy/BoQBody/Remark/Description/CompleteText/DetailTxt/Text' + '[' + IntToStr(i + 1) + '] + '/p/image'
Ich möchte jedoch nur die Bilder aus dem ersten "BoQCtgy"-Knoten auslesen, wenn meine Schleifenvariable i von der ersten Nodelist bei 0 ist. Wenn i = 2 ist dann eben nur die Bilder aus dem 3. "BoQCtgy"-Knoten.

Wenn ich also nur aus einem Knoten "BoQCtgy" alle Bilder auslesen möchte, wie müsste da mein XPath-Ausdruck lauten?

Ich hoffe ich konnte mein Anliegen einigermaßen anschaulich rüberbringen.

Vielen Dank schon mal vorab!

juergen 7. Dez 2019 12:53

AW: XML: XPath-Ausdruck gesucht
 
Hallo Frühlingsrolle,

Danke für deine Antwort.
Heute Morgen war es wohl schon etwas zu spät...
Nun habe ich das Problem direkt erkannt und lösen können.

Hier der XPath-Ausdruck (auszugsweise und ohne Fehlerbehandlung und Prüfungen):

Code:
{ -------------------------------------------------------------------- }
// Beginn Hierarchie 1
{ -------------------------------------------------------------------- }
lbb_Bild: TBlobByteData;
x_queryNode := frm_Main.my_XMLDocument.DocumentElement;
x_NodeList_Hierarchie_1 := x_queryNode.SelectNodes('// Award/BoQ/BoQBody/BoQCtgy');
IF x_NodeList_Hierarchie_1.Count > 0 THEN
BEGIN
  FOR i := 0 TO Pred(x_NodeList_Hierarchie_1.Count) DO
  BEGIN
    // ....

    // Bilder
    BEGIN
      ls_Knoten_Bilder := '//Award/BoQ/BoQBody/BoQCtgy' + '[' + IntToStr(i + 1) + ']' + '/BoQBody/Remark/Description/CompleteText/DetailTxt/Text/p/image'; { <== entscheidend ist,
        dass i aus der Haupt-Nodelist beim XPath-Ausdruck für die Bilder hinter dem selben Knoten stehen muss wie der Knoten aus der Haupt-Nodelist! }
      x_NodeList_Bilder := x_queryNode.SelectNodes(ls_Knoten_Bilder);
      FOR j := 0 TO Pred(x_NodeList_Bilder.Count) DO
      BEGIN
        lbb_Bild := NIL;
        lbb_Bild := Bild_nativ_erzeugen_aus_Base64_codierten_Daten(x_NodeList_Bilder.Nodes[j].Text); { function }
        // ...
      END;
    END;
  END; // Ende Durchlauf Nodelist Bilder
END; // Ende Durchlauf Nodelist Hirerarchie_1
Somit ist das Problem gelöst.

Allen noch ein schönes Wochenende!


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:09 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz