xml读取中需要注意的地方
并不是所有的XmlNode.Value都是有定义的,
我们初学者可能常犯的错误:
<root>
aaa
</root>
我们会企图用下面的代码访问值:aaa
XmlDocument doc = new XmlDocument();
doc.Load("test.xml");
XmlElement root = doc.DocumentElement;
Console.WriteLine(root.Value);
但实际上,root还有一个childNode,即字符串“aaa”,他的类型是:Text
我们必须这样访问它:
Console.WriteLine(root.ChildNodes[0].Value);
但是我发现如果用XPathNavigator来访问xml文件就不同,如下面的例子:
XPathDocument doc = new XPathDocument("test.xml");
XPathNavigator nav = doc.CreateNavigator();
string strXPath = "/root";
XPathExpression expr = nav.Compile(strXPath);
XPathNodeIterator iter = nav.Select(expr);
iter.MoveNext();
Console.WriteLine(nav.Value);
Navigator也只是定位到root节点,但它就可以直接访问到value值。
这可能是提供了区别于上面那种的访问方式吧。
至于内部Navigator是怎么实现的,待我去问问我们的鞠老大吧。
我们初学者可能常犯的错误:
<root>
aaa
</root>
我们会企图用下面的代码访问值:aaa
XmlDocument doc = new XmlDocument();
doc.Load("test.xml");
XmlElement root = doc.DocumentElement;
Console.WriteLine(root.Value);
但实际上,root还有一个childNode,即字符串“aaa”,他的类型是:Text
我们必须这样访问它:
Console.WriteLine(root.ChildNodes[0].Value);
但是我发现如果用XPathNavigator来访问xml文件就不同,如下面的例子:
XPathDocument doc = new XPathDocument("test.xml");
XPathNavigator nav = doc.CreateNavigator();
string strXPath = "/root";
XPathExpression expr = nav.Compile(strXPath);
XPathNodeIterator iter = nav.Select(expr);
iter.MoveNext();
Console.WriteLine(nav.Value);
Navigator也只是定位到root节点,但它就可以直接访问到value值。
这可能是提供了区别于上面那种的访问方式吧。
至于内部Navigator是怎么实现的,待我去问问我们的鞠老大吧。