C # XmlDocument Auswahlknoten

8

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.

    
Daniel 07.08.2009, 23:07
quelle

2 Antworten

18

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.)

    
Jon Skeet 07.08.2009, 23:17
quelle
12

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.

%Vor%

(wobei x in nsmgr als Alias ​​für den angegebenen Namespace definiert ist)

    
Marc Gravell 07.08.2009 23:13
quelle

Tags und Links