Ich habe ein XML-Dokument, das so aussieht:
%Vor%
Es sind keine Schemas verfügbar, obwohl Namespaces angegeben sind (ich bekomme das von einer externen Quelle, also habe ich keine Kontrolle). Ich analysiere es mit einem XDocument, bekomme aber Nullen für die Elemente, die nicht im env-Namespace sind. Ich richte das XDocument so ein:
%Vor%Dann versuche ich Werte zu erhalten:
? Source.XPathSelectElement ("// kmsg", oManager)
null
? Source.XPathSelectElement ("// header", oManager)
null
? Source.XPathSelectElement ("// env: source", oManager)
Ruft den Knoten richtig ab
Ich gehe davon aus, dass dies etwas damit zu tun hat, dass ich den Namespace-Manager falsch eingerichtet habe, aber ich kann nicht herausfinden, wie ich ihn beheben kann. Jede Hilfe wäre großartig.
Danke
Zusätzlich zu der korrekten Bemerkung von @ Mads-Hansen haben Sie das typische Problem, dass Sie für einen der Namespaces kein (nicht leeres) Präfix definieren.
Remember : XPath betrachtet jeden Namen ohne Präfix als "keinen Namespace".
Daher ist das falsch :
%Vor% Dieser XPath-Ausdruck möchte alle kmsg
-Elemente auswählen, die sich in "no namespace" befinden, und er wählt nichts korrekt aus, weil alle kmsg
-Elemente im bereitgestellten XML-Dokument im Namespace "http://url1"
und nicht in " kein Namespace ".
Um es richtig zu machen :
%Vor% Die Namespace-URIs, die in Ihrer Quell-XML deklariert sind, stimmen nicht mit den Namespace-URIs überein, die Sie bei Ihrer XmlNamespaceManager
registrieren.
In Ihrer Quell-XML:
http://url1
url1
In deinem XmlNamespaceManager
hast du erklärt:
http://xml.kerridge.net/k8msg
http://xml.kerridge.net/k8msgEnvelope
Die Namespace-Uri-Werte müssen übereinstimmen, andernfalls wählen Sie verschiedene Elementnamen und erhalten nie eine Übereinstimmung.
Tags und Links c# xpath linq-to-xml xml-namespaces