bgmCoder bgmCoder - 1 month ago 17
C# Question

Easy XPathNavigator GetAttribute

Just getting started here with my first take at

XPathNavigator
.

This is my simple xml:

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<theroot>
<thisnode>
<thiselement visible="true" dosomething="false"/>
<another closed node />
</thisnode>

</theroot>


Now, I am using the
CommonLibrary.NET
library to help me a little:

public static XmlDocument theXML = XmlUtils.LoadXMLFromFile(PathToXMLFile);

const string thexpath = "/theroot/thisnode";

public static void test() {
XPathNavigator xpn = theXML.CreateNavigator();
xpn.Select(thexpath);
string thisstring = xpn.GetAttribute("visible","");
System.Windows.Forms.MessageBox.Show(thisstring);
}


Problem is that it can't find the attribute. I've looked through the documentation at MSDN for this, but can't make much sense of what's happening.

Answer

Two problems here are:

(1) Your path is selecting the thisnode element, but the thiselement element is the one with the attributes and
(2) .Select() does not change the location of the XPathNavigator. It returns an XPathNodeIterator with the matches.

Try this:

public static XmlDocument theXML = XmlUtils.LoadXMLFromFile(PathToXMLFile);

const string thexpath = "/theroot/thisnode/thiselement";

public static void test() {
    XPathNavigator xpn = theXML.CreateNavigator();
    XPathNavigator thisEl = xpn.SelectSingleNode(thexpath);
    string thisstring = xpn.GetAttribute("visible","");
    System.Windows.Forms.MessageBox.Show(thisstring);
}