Laden...

XPath liefert mit konkreten Namen kein Ergebnis, jedoch mit Wildcards

Erstellt von bigeddie vor 4 Jahren Letzter Beitrag vor 4 Jahren 1.206 Views
B
bigeddie Themenstarter:in
372 Beiträge seit 2007
vor 4 Jahren
XPath liefert mit konkreten Namen kein Ergebnis, jedoch mit Wildcards

verwendetes Datenbanksystem: <XmlDocument>

Hallo,

beim Abfragen von Daten in einem XmlDocument mit XPath erhalten ich bei der Angabe eines exakten Pfades (z.B. /Stadt/Lokation/Gericht) kein Ergebnis.
Gebe ich hingegen den Pfad nur mit Wildcards (z.B. //) an, so erhalte ich z.B. in der XmlNodeList alle "Lokation"-Knoten.

Auch bei Verwendung eines NamespaceManagers bei der Abfrage erhalte ich gleiche Resultate.

Welche Ursache könnte dies haben?

Viele Grüße

Ernstl

Man muß nichts wissen,
man muß nur wissen wer es wissen könnte
oder wo es steht😉

16.806 Beiträge seit 2008
vor 4 Jahren

Magst auch Deinen Code dazu zeigen, was Du aktuell machst?

656 Beiträge seit 2008
vor 4 Jahren

Meine Glaskugel sagt mir, dass du ein Dokument mit Namespaces hast (entweder xmlns="..." oder xmlns:pref="..." mit <pref:element>...).
X-Path 1.0 (was mit System.Xml angeboten wird) kann keine Default-Namespace Queries; dh. du musst deinen X-Path in dem Fall immer mit Präfix definieren; egal welche der beiden Formen du benutzt. Der Namespace Manager gibt dir dabei das Mapping von (einem beliebigen) Präfix zu dem (im Dokument verwendeten) Namespace an.

T
2.219 Beiträge seit 2008
vor 4 Jahren

@BhaaL
System.Xml kann durch den XmlNamespaceManager sehr wohl mit den Namespaces umgehen.
Hier muss man nur den XmlNamespaceManager mit den Namespaces füllen und dann an die entsprechenden Überladungen z.B. bei XmlDocument/XmlNode SelectSingleNode/SelectNodes mitgeben.

Doku

T-Virus

Developer, Developer, Developer, Developer....

99 little bugs in the code, 99 little bugs. Take one down, patch it around, 117 little bugs in the code.

656 Beiträge seit 2008
vor 4 Jahren

@BhaaL
System.Xml kann durch den XmlNamespaceManager sehr wohl mit den Namespaces umgehen.

Ich hatte spezifisch default Namespace Queries (also /Your/Nodes/Here für <Your xmlns="ns"><Nodes><Here/>...) geschrieben; also eine Abfrage wo ein unqualified QName tatsächlich ein Element in einem Namespace beschreibt.

Hier muss man nur den XmlNamespaceManager mit den Namespaces füllen und dann an die entsprechenden Überladungen z.B. bei XmlDocument/XmlNode SelectSingleNode/SelectNodes mitgeben.

Korrekt. Das wollte ich mit dem zweiten Teil der Anmerkung auch aussagen (dass man trotz default namespace im Dokument ein Präfix vergeben/nutzen muss).