C# XML Knoten finden per XPath
-
Hallo,
ich habe ein kleines Problem. Ich möchte in einer XML-Datei einen Knoten mit der Methode SelectSingleNode finden.
Dazu will ich einen XPath Ausdruck verwenden, nur leider bin ich ziemlich erfolglos.ZUnächst einmal ein Ausschnitt aus der XMl-Datei:
<?xml version="1.0" standalone="yes"?> <scan_data xmlns="http://tempuri.org/scan_data.xsd" > <assets> <inv_nr>item 0</inv_nr> <bez>item 0</bez> <std_code>0000</std_code> <std_bez>item 0</std_bez> <kst>item 0</kst> </assets> <assets> <inv_nr>item 1</inv_nr> <bez>item 1</bez> <std_code>0001</std_code> <std_bez>item 1</std_bez> <kst>item 1</kst> </assets> </scan_data>
Und hier mein Xpath-Ausdruck:
string xPathExpression = "/scan_data/assets[inv_nr='item 0']";
Ich möchte also den Knoten haben, wo inv_nr meinen Kriterien entspricht.
Leider liefert mir einXmlElement node= (XmlElement)xmlfile.SelectSingleNode( xPathExpression );
immer null. Er wird also nicht gefunden.
Liegt es am xmlns="http://tempuri.org/scan_data.xsd" in der XML-Datei?
-
Marco79 schrieb:
Liegt es am xmlns="http://tempuri.org/scan_data.xsd" in der XML-Datei?
Wenn du das weglässt geht es.
-
Ja richtig.
Nur leider erzeuge ich die Datei nicht und muss sie so nehmen wie sie kommt.
-
Du kannst den Namespace auch hinzufügen:
XmlNamespaceManager namespaceManager = new XmlNamespaceManager (xmldoc.NameTable); namespaceManager.AddNamespace("","http://tempuri.org/scan_data.xsd"); XmlNode node = xmldoc.SelectSingleNode("/scan_data/assets[inv_nr='item 0']");
Zumindest so in etwa, ist jetzt aus dem Kopf. Einfach mal die Doku dazu befragen.
-
Ok vielen Dank, so klappt es:
XmlNamespaceManager nsp = new XmlNamespaceManager( xmldoc.NameTable ); nsp.AddNamespace( "ns", "http://tempuri.org/scan_data.xsd" ); string xPathExpression = "/ns:scan_data/ns:assets[ns:inv_nr='item 0']"; XmlElement node = (XmlElement)xmldoc.SelectSingleNode( xPathExpression, nsp );
Man muss also den Namespacepräfix mit in den String aufnehmen.
Thema kann geschlossen werden