Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   XML (https://www.delphipraxis.net/46-xml/)
-   -   Delphi XMLDocument auslesen (https://www.delphipraxis.net/89060-xmldocument-auslesen.html)

dr. love 25. Mär 2007 14:31


XMLDocument auslesen
 
Also eins gleich vorweg... XML is völliges Neuland für mich und die Frage wahrscheinlich leicht zu beantworten... im Forum hab ich aber nix gefunden. Im folgenden mal die Struktur einer einfachen XML-Datei:


Delphi-Quellcode:
- <array>
  <curLength>0</curLength>
  - <struct>
    <index>1</index>
    - <array>
      <name>NADROUTSCELVL</name>
      <curLength>0</curLength>
      - <array>
        <index>1</index>
        <curLength>0</curLength>
        - <encoded>
          <style>be</style>
          <size>4</size>
          <data>1234567890000000000000010000000000000001000000000000</data>
          </encoded>
        </array>
      - <array>
        <index>2</index>
        <curLength>0</curLength>
        - <encoded>
          <style>be</style>
          <size>4</size>
          <data>9876543210000000000000010000000000000001000000000000</data>
          </encoded>
        </array>
      </array>
    </struct>
  </array>

Auf die Inhalte kann man bekanntlich über
Delphi-Quellcode:
XMLDocument.DocumentElement.ChildNodes['NAME'].Text
zugreifen


Der Ausdruck

Delphi-Quellcode:
ListBox1.Items.Add(XMLDocument1.DocumentElement.ChildNodes['struct'].ChildNodes['array'].ChildNodes['array'].ChildNodes['index'].Text);
schreibt den String "1" in die ListBox. Das entspricht dem Index des ersten Arrays. Wenn ich aber ein weiteres "Array" (wie oben mit dem Index 2) habe, wie komme ich dann an dessen Index? Schließlich sind die Namen identisch.

marabu 25. Mär 2007 15:24

Re: XMLDocument auslesen
 
Hallo,

wenn du kein identifizierendes Merkmal für den Einzelzugriff hast oder - wie in deinem Fall - generell eine Knotenmenge verarbeiten willst, dann kannst du so vorgehen:

Delphi-Quellcode:
procedure TDemoForm.ButtonClick(Sender: TObject);
var
  dl: IDOMNodeList;
  dn: IDOMNodeEx;
  xPath: string;
  i: Integer;
begin
  with XMLDoc.DOMDocument as IDOMNodeSelect do
  begin
    xPath := '/array/struct/array/array/index';
    dl := selectNodes(xPath);
    for i := 0 to Pred(dl.length) do
    begin
      dn := dl.item[i] as IDOMNodeEx;
      ShowMessage(String(dn.Text));
    end;
  end;
end;
Dabei enthält xmlDoc (TXMLDocument) deine Beispieldatei.

Grüße vom marabu

dr. love 25. Mär 2007 15:34

Re: XMLDocument auslesen
 
Hallo!

Scheint zu funktionieren, wenn auch etwas umständlich. Danke Marabu!


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:41 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