Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 读取xml节点属性_C#_Xml_Visual Studio 2012 - Fatal编程技术网

C# 读取xml节点属性

C# 读取xml节点属性,c#,xml,visual-studio-2012,C#,Xml,Visual Studio 2012,我有一个xml文档,它有这样的节点, 我要做的是为文档中存在的每个项目节点获取所有id的属性值 那么,我该怎么做呢? 编辑:我尝试过这种方法,但没有成功: XmlDocument Doc = new XmlDocument(); Doc.Load("example.xml"); XmlNodeList nodeList = Doc.SelectNodes("/ITEM"); foreach (XmlNode node in nodeList)

我有一个xml文档,它有这样的节点,
我要做的是为文档中存在的每个项目节点获取所有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确实包含名称空间:

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>
使用单斜杠时,上面的
XPath
如下所示:

/root/items/ITEM

我还使用
[@id]
来确保
元素有一个
id
属性,但如果您知道它们都有一个
id
属性,那么这是不必要的。

您的方法是可行的,但问题是您从代码加载xml结构,而不是从文件加载。@derezed这并不重要,您也可以从文件加载它,只要文件格式正确并且是有效的XML,它的工作原理应该是相同的。因为我不知道你的文件是怎样的,所以我制作了我自己的示例来向你展示。很抱歉没有给出文件结构,文件是这样的,@Derezzed aha这是因为你有一个名称空间,请参见顶部代码的更新。它可以工作,但有点奇怪,它不是从“0”id打印的,它只是打印一些id,而不是全部id。无论如何,非常感谢你帮助我。
/root/items/ITEM