Ich habe ein XML-Dokument mit einem Wurzelelement, zwei untergeordneten Elementen, "Diagnose" und "Ergebnisse". Das Element 'results' hat dann eine beliebige Anzahl von Elementen mit dem Namen 'result'
Wenn dies in ein XmlDocument geladen wird, ist es einfach, durch die Struktur zu navigieren und zu sehen, dass genau so die Dinge funktionieren. Ich kann eine rekursive Funktion schreiben, die alle "Ergebnis" -Elemente auswählt. Die XmlDocument.SelectNodes ("// results") findet einen Knoten kein Problem.
Allerdings
* XmlDocument.SelectNodes ("// results / result") findet nichts.
* XmlDocument.SelectNodes ("// result") findet nichts.
Ich habe mit einem Kollegen gesprochen und er hatte Probleme mit Xpath in XmlDocument.SelectNodes. Ist sonst noch jemand auf dieses Problem gestoßen? Irgendwelche Lösungen?
XML-Datei:
%Vor%XPATH
doc.SelectNodes ("// result") erzeugt keine Treffer.
Robs und Marcs Antworten gehen wahrscheinlich in die richtige Richtung - XmlDocument + Namespaces + XPath können ein bisschen schmerzen.
Wenn Sie .NET 3.5 verwenden können, sollten Sie stattdessen LINQ to XML verwenden. Das würde es wirklich leicht machen:
%Vor%Grundsätzlich ist LINQ to XML nach meiner Erfahrung in fast jeder Hinsicht eine überlegene API :) (Ich glaube, es gibt einige Fähigkeiten, die es vermissen lässt, aber wenn Sie Zugriff auf .NET 3.5 haben, ist es zumindest einen Versuch wert.)
Es klingt für mich wie Namespaces sind die Probleme; Im Allgemeinen müssen Sie hierfür die Hilfe von XmlNamespaceManager
verwenden und in Ihren Abfragen einen Alias verwenden, d. h.
(wobei x
in nsmgr
als Alias für den angegebenen Namespace definiert ist)