读取xml节点属性

时间:2013-09-15 23:43:03

标签: c# xml visual-studio-2012

我有一个包含这样的节点的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);
        }

1 个答案:

答案 0 :(得分:16)

您应该在XmlNamespaceManager的调用中使用SelectSingleNode(),因为您的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属性,则不需要这样做。< / p>