Autor Beitrag
uall@ogc
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1826
Erhaltene Danke: 11

Win 2000 & VMware
Delphi 3 Prof, Delphi 7 Prof
BeitragVerfasst: Mo 29.09.08 10:03 
Hallo, ich möchte auf ein Element einer XMLDatei mittels XPath zugreifen.

Der Code:
ausblenden Delphi-Quelltext
1:
2:
  XMLDocRead.LoadFromFile ('datei.xml');
  Bild := (XMLDocRead.DOMDocument as IDOMNodeSelect).selectNode('/WurzelName');

funktioniert nicht (Bild ist nil).

Der Code:
ausblenden Delphi-Quelltext
1:
2:
  XMLDocRead.LoadFromFile ('datei.xml');
  Bild := (XMLDocRead.DOMDocument as IDOMNodeSelect).selectNode('//*');

funktioniert zwar, aber liefert mir ja alle Elemente zurück. Ich benötige aber nur ein bestimmtes. (z.B.: /WurzelName/Test/hallo)

XMLDocRead ist ein TXmlDocument
Bild ist ein IDomNode
DomVendor ist MSXML

_________________
wer andern eine grube gräbt hat ein grubengrabgerät
- oder einfach zu viel zeit
Sinspin
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1335
Erhaltene Danke: 118

Win 10
RIO, CE, Lazarus
BeitragVerfasst: Di 30.09.08 18:58 
Ich habe gut Erfahrungen mit MSXML gemacht.
Hier ein Beispiel aus einem meiner Programme:

Es wird allerdings keine Datei geladen, sondern ein String verwendet in dem sich der Inhalt der Datei befindet.
Freigegeben muss XMLDoc nicht werden da es sich um ein Interface handelt das sich selber verwaltet.
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
  CoInitialize(nil);
  XMLDoc := CreateOleObject('Microsoft.XMLDOM'as IXMLDomDocument;
  XMLDoc.LoadXML(aXMLString);

  // einzelner Knoten
  state := XMLDoc.documentElement.selectSingleNode('./Ack').text;

  // Liste von Nodes
  errors := XMLDoc.documentElement.selectNodes('Errors');
  for l := 0 to errors.length -1 do
  begin
    text := UTF8Decode(errors.item[l].selectSingleNode('LongMessage').text); // Element Text
    code := errors.item[l].selectSingleNode('ErrorCode').text;               // Element Text
    errorValues := errors.item[l].selectNodes('./ErrorParameters/Value');    // Liste von Subnodes
  end;
  CoUninitialize;

_________________
Wir zerstören die Natur und Wälder der Erde. Wir töten wilde Tiere für Trophäen. Wir produzieren Lebewesen als Massenware um sie nach wenigen Monaten zu töten. Warum sollte unser aller Mutter, die Natur, nicht die gleichen Rechte haben?
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Di 30.09.08 19:24 
"/" ist schon die Wurzel, versuch es einmal mit "/Test/Hallo".

_________________
>λ=