C# 读取xml节点属性
我有一个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)
我要做的是为文档中存在的每个项目节点获取所有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