读取 xml 节点属性
本文关键字:属性 节点 xml 读取 | 更新日期: 2023-09-27 18:31:34
>我有一个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
属性,则没有必要。