Easy XPathNavigator GetAttribute

bgmCoder picture bgmCoder · May 4, 2013 · Viewed 17k times · Source

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

JLRishe picture JLRishe · May 4, 2013

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);
}