Der*_*zed 5 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);
}
Run Code Online (Sandbox Code Playgroud)
Pri*_*rix 16
您应该在调用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);
}
Run Code Online (Sandbox Code Playgroud)
这就是你没有结果的原因.
从我的代码到你的代码的不同之处在于我使用的//是代替从文档的根开始,双正斜杠//指示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>
Run Code Online (Sandbox Code Playgroud)
以下是我的阅读方式:
var doc = new XmlDocument();
doc.Load("example.xml");
foreach (XmlNode node in doc.SelectNodes("//ITEM[@id]"))
{
Console.WriteLine(node.Attributes["id"].Value);
}
Run Code Online (Sandbox Code Playgroud)
使用单斜杠,上面的内容XPath如下所示:
/root/items/ITEM
Run Code Online (Sandbox Code Playgroud)
我也在使用[@id]以确保ITEM元素具有ID属性,但如果您知道它们都具有ID属性,则不需要.
| 归档时间: |
|
| 查看次数: |
42088 次 |
| 最近记录: |