Mark wrote:
Quote:
From our prior discussion, I didn't know what to expect from the dangling
node. In the case of the dangling (unrooted) element, selecting "//b"
essentially treated the dangling node as the root and found the child.
>
Is this a fundamentally different case that the one we talked about before?
|
The results astonish me.
Here is a test:
XmlDocument doc = new XmlDocument();
XmlElement foo = doc.CreateElement("foo");
foo.InnerXml = "<bar>baz</bar>";
XmlNode rootNode = foo.SelectSingleNode("/");
Console.WriteLine("rootNode.NodeType: {0}; LocalName: {1}",
rootNode.NodeType, rootNode.LocalName);
XPathNavigator fooNav = foo.CreateNavigator();
XPathNavigator rootNav = fooNav.SelectSingleNode("/");
Console.WriteLine("rootNav.NodeType: {0}; LocalName: {1}",
rootNav.NodeType, rootNav.LocalName);
Output for me with Visual Studio 2005:
rootNode.NodeType: Element; LocalName: foo
rootNav.NodeType: Element; LocalName: foo
So for the XPath API the dangling element node has itself as its root
node selected by the XPath "/". If you select "/*" then you get the
'bar' element as
XmlDocument doc = new XmlDocument();
XmlElement foo = doc.CreateElement("foo");
foo.InnerXml = "<bar>baz</bar>";
XmlNode rootElement = foo.SelectSingleNode("/*");
Console.WriteLine("rootElement.NodeType: {0}; LocalName:
{1}", rootElement.NodeType, rootElement.LocalName);
XPathNavigator fooNav = foo.CreateNavigator();
XPathNavigator rootElNav = fooNav.SelectSingleNode("/*");
Console.WriteLine("rootElNav.NodeType: {0}; LocalName:
{1}", rootElNav.NodeType, rootElNav.LocalName);
outputs
rootElement.NodeType: Element; LocalName: bar
rootElNav.NodeType: Element; LocalName: bar
That "/" selects an element node is rather odd in my view.
--
Martin Honnen --- MVP XML
http://JavaScript.FAQTs.com/