读取 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);
        }

读取 xml 节点属性

在调用 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 属性,则没有必要。