我有一个具有这样的节点的xml文档,<ITEM id="1" name="bleh"... />
我要做的是获取文档中存在的每个ITEM节点的所有id的属性值。
编辑:我已经尝试过这种方式,但没有成功:
XmlDocument Doc = new XmlDocument();
Doc.Load("example.xml");
XmlNodeList nodeList = Doc.SelectNodes("/ITEM");
foreach (XmlNode node in nodeList)
{
string id = node.Attributes["id"].Value;
Console.WriteLine(id);
}
您应该在对SelectSingleNode()的调用中使用XmlNamespaceManager,因为XML确实包含一个名称空间:
var doc = new XmlDocument();
doc.Load("example.xml");
XmlNamespaceManager ns = new XmlNamespaceManager(doc.NameTable);
ns.AddNamespace("anyname", "http://tempuri.org/zitem.xsd");
foreach (XmlNode node in doc.SelectNodes("//anyname:ITEM", ns))
{
Console.WriteLine(node.Attributes["id"].Value);
}
这就是为什么你没有结果。
我的代码与您的代码的不同之处在于,我使用的//
不是从文档的根部开始,而是使用双斜线//
表示XPath
评估人员可以在XML文档中的任何地方查找。
这是我的example.xml
示例:
<root>
<items>
<ITEM id="1" name="bleh=" />
<ITEM id="2" name="bleh=" />
<ITEM id="3" name="bleh=" />
<ITEM id="4" name="bleh=" />
<ITEM id="5" name="bleh=" />
<ITEM id="6" name="bleh=" />
<ITEM id="7" name="bleh=" />
<ITEM id="8" name="bleh=" />
</items>
</root>
这是我的阅读方式:
var doc = new XmlDocument();
doc.Load("example.xml");
foreach (XmlNode node in doc.SelectNodes("//ITEM[@id]"))
{
Console.WriteLine(node.Attributes["id"].Value);
}
用单斜杠,上面XPath
看起来像这样:
/root/items/ITEM
我还[@id]
用于确保ITEM
元素具有ID
属性,但是如果您知道它们都具有ID
属性,则不必这样做。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句