尝试运行以下代码时,我得到的异常是NodeType“None”不受支持。
public int ObjectContentI(string XmlPath)
{
XmlNodeReader xnr = new XmlNodeReader(this.xmlr.SelectSingleNode(XmlPath));
return xnr.ReadElementContentAsInt();
}
this.xmlr是一个XmlDocument,其中成功加载了一个文档。 XmlPath包含有效的XPath URL。
如何设置NodeType(xnr.NodeType是readonly)还是我做错了什么?
我的部分XML:
<?xml version="1.0" encoding="utf-8" ?>
<ship weapons="0">
<cost>
<metal>250</metal>
<crystal>100</crystal>
</cost>
<health>
<shields>750</shields>
<sregene>10</sregene>
<hitpoints>1000</hitpoints>
<oxygen cps="2">25000</oxygen>
</health>
我的XPath:“/ ship / health / shields / text()”
答案 0 :(得分:1)
嗯,你的方法是正确的但不完全。
我们假设
XmlNode n = myXMLDoc.SelectSingleNode("/ship/health/shields/");
n.InnerXML
或n.InnerText
应该为您提供所需的信息。
答案 1 :(得分:0)
虽然conqenator为您提供了修复问题的代码,但后面的原因是为什么它首先不起作用:
如果你没有在XmlNodeReader或从XmlReader派生的任何类上调用Read方法,你将总是得到一个XmlNodeType.None NodeType,这就是错误的原因。要修复你提供的代码并获得一个int,这就是代码需要的样子:
public int ObjectContentI(string XmlPath)
{
int result;
using(XmlNodeReader xnr = new XmlNodeReader(this.xmlr.SelectSingleNode(XmlPath))){
while(xnr.Read()){
result = xnr.ReadElementContentAsInt();
}
}
return result;
}
请注意,获取此wroking的XPath需要更改为/ship/health/shields
,因为ReadElementContentAsInt()
会返回元素的内容,并且无法在文本节点上运行,这是您在使用时获得的/ship/health/shields/text()
1}}。
请注意,我还将XmlNodeReader包装在一个using块中,一旦完成它就会处理XmlNodeReader以释放资源。