C#, XML: SelectSingleNode

Hallo Wissende, ich hoffe ihr könnt mir helfen.

Ich übergebe eine XmlNode an eine Methode und versuche diese dann dort auszuwerten, genauer möchte ich aus der Node eine Childnode extrahieren um an den innerText ranzukommen.

 public Boolean checkAppl(XmlNode node)
 {
 // DEBUG
 if (node.HasChildNodes)
 {
 foreach (XmlNode child in node.ChildNodes)
 {
 MessageBox.Show(child.Name);
 }
 }

 // XPATH
 XmlNode dirNode = node.SelectSingleNode("/gruppe/\*");

 // DEBUG
 if (dirNode == null)
 {
 MessageBox.Show("NULL");
 }
 else
 {
 MessageBox.Show(node.Name);
 }

 /\*
 if (File.Exists(dirNode.InnerText))
 {
 return true;
 }
 else
 {
 return false;
 }
 \*/
 return true;
 }

Leider ist das Objekt Null wenn ich versuche eines der ChildNodes über XPath zu erreichen. Nicht aber wenn ich „/*“ als XPATH nehme, dann wird der gruppenknoten zurück gegeben. Ebenfalls funktioniert die DEBUG ausgabe über die ChildNodes, dort werden die namen korrekt ausgegeben, was mich um so mehr verwirrt. Kann mir jemand sagen warum ? Oder wo der Fehler ist?

Hier nochmal der XmlKonten in übersicht:

 NeroC:\Programme\Ahead\Nero\nero.exeH:\wdbbwdb\Icons\nero.png

XmlNode dirNode = node.SelectSingleNode("/gruppe/*");

XmlNode dirNode = node.SelectSingleNode("/root/gruppe/dir");

Ok ich hab es hinbekommen… aber der „Fehler“ leuchtet mir nicht ganz ein. Wieso muss ich noch den root pfad mit angeben, wo ich doch direkt auf den knoten, also das child vom root, zugreife? Lasse ich mir den namen des knoten ausgeben bekomme ich auch „gruppe“ und nicht „root“ … funktionieren tut es jetzt, aber verstehen kann ich es nicht, wäre also über ein kommentar weiterhin erfreut.

Danke für Eure Zeit

XML:

NeroC:\Programme\Ahead\Nero\nero.exeH:\wdbbwdb\Icons\nero.pngSpeedbookC:\Programme\AvRack\rtlrack.exeH:\wdbbwdb\Icons\nero.jpgSpeedbookC:\Programme\AvRack\rtlrack.exeH:\wdbbwdb\Icons\nero.jpg

Hallo!
Das Problem ist, dass Deine XPath-Angabe im SelectSingleNode falsch ist. Wenn Du mit „/“ beginnst, bedeutet das die Wurzel des XML-Schemas. Relative Kindknoten erreichst Du ohne das führende „/“.

Gruß,
Martin

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

1 Like

Hallo!
Das Problem ist, dass Deine XPath-Angabe im SelectSingleNode
falsch ist. Wenn Du mit „/“ beginnst, bedeutet das die Wurzel
des XML-Schemas. Relative Kindknoten erreichst Du ohne das
führende „/“.

Gruß,
Martin

Danke Martin, dieses Wissen hilft mir imens!