Mit XPath auf eine XML Datei zugreifen

Tikonteroga

Erfahrenes Mitglied
Hallo,

ich versuche zurzeit mit XPath und .NET bestimmte Daten aus einer XML Datei zu lesen.

Ich verwende dabei die Klasse System.Xml.XmlDocument. Ich glaube jedoch, dass ich dafür irgendwie zu blöd bin, denn wenn ich mir mit einem XPATH Ausdruck einen NodeList zurückgeben lasse, enthält diese immer 0 Elemente.

Hier mal ein Beispiel:

Code:
<AUTOSAR ...>
  <ADMIN-DATA>
     ...
  </ADMIN-DATA>
  <TOP-LEVEL-PACKAGES>
     ...
  </TOP-LEVEL-PACKAGES>
  ...
</AUTOSAR>

Code:
XmlNodeList nodeList = arxmlDocument.SelectNodes("/child::TOP-LEVEL-PACKAGES");

Was mache ich falsch ?
 
Hi.

Das / ist das Dokument Element. Dieses Element hat immer genau einen Kindknoten: das Root-Element (hier AUTOSAR).

Also
Code:
/child::AUTOSAR/child::TOP-LEVEL-PACKAGES
oder natürlich einfach
Code:
/AUTOSAR/TOP-LEVEL-PACKAGES
Gruß
 
Hallo,

danke für die schnelle Antwort. In der Form hatte ich es auch schon versucht, dies hatte auch 0 Elemente zurückgegeben.

Ich habe es eben auch nochmal wiederholt, wieder das gleiche ...
 
Vermutlich werden in dem XML Dokument Namensräume verwendet. Du mußt erstens einen Präfix für den Namensraum definieren und dann natürlich den Namensraum auch verwenden:
Code:
/ns:AUTOSAR
Gruß
 
Hallo,

ich habe jetzt schon einiges versucht, erhalte dann aber eine Exception.

Ich habe mal einen ausgeschwarzten Root angehängt.

Code:
<AUTOSAR xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="..." xsi:schemaLocation="..." T="...">
 
Also in meinem XML Dokument wird zwar ein Namensraum definiert, aber ihm wird kein Prefix zugewiesen. Ich kann also keinen Prefix in den XPath-Ausdruck einbauen.

Aber wenn ich einen XPath-Ausdruck ohne Prefix verwende, erhalte ich eine leere Menge ...

Ich weiss jetzt immernoch nicht woran es liegt. Wenn ich das Problem über Google, über das ich diesen Artikel auch schon gefunden hatte, hätte lösen können, hätte ich nicht hier gepostet ...
 
Es ist völlig egal welcher Präfix im XML Dokument für einen Namensraum vereinbart wird. Vereinbare einfach einen (siehe das Codebeispiel) und verwende ihn.

Gruß
 

Neue Beiträge

Zurück