如何按名称获取节点
本文关键字:节点 获取 何按名 | 更新日期: 2023-09-27 17:50:23
这是一个简单的任务,但是我做不到。给定以下XML:
<?xml version="1.0" encoding="UTF-8"?>
<product>
<item1></item1>
<item2></item2>
<item3></item3>
</product>
我想获得product
内的所有节点。以下两次尝试没有返回节点,我不明白为什么:
XDocument meteoDoc = XDocument.Load("data.xml");
foreach (var item in meteoDoc.Descendants("product")) {//...}
foreach (var item in meteoDoc.Descendants().Where(x => x.Name == "product").Nodes()) {//...}
如下所示,将返回所有节点:
foreach (var item in meteoDoc.DescendantNodes()) { //...}
谢谢你的提示,我看不出问题…: -/
您的第一次尝试是请求所有的Descendants
称为 product
。您的第二次尝试是查找所有称为product
的后代的直接子节点。
它可能在根元素中寻找后代…如果您知道根元素名为product
,则只需使用:
foreach (var item in meteoDoc.Root.Descendants())
(我不能测试你现有的代码来找出为什么它现在不能为你工作,我担心。)
注意Descendants
只会发现后代元素 -如果您想要所有后代节点,您需要DescendantNodes
方法。
使用
XDocument meteoDoc = XDocument.Load("data.xml");
foreach (var item in meteoDoc.Root.Descendants())
{
// ...
}
试试这个:
foreach (var item in meteoDoc.Descendants("product"))
{
foreach (var prod in item.Descendants())
{
// do something
}
}
我对xml做了一些更改,这样数据就更有条理了,我可以给你一段代码来完成你的任务。
static void Main(string[] args)
{
//Data.xml
/*
<?xml version="1.0" encoding="UTF-8"?>
<product>
<item>
<name>test</name>
</item>
<item>
<name>test2</name>
</item>
<item>
<name>test3</name>
</item>
</product>
*/
XDocument meteoDoc = XDocument.Load("data.xml");
var result = from c in meteoDoc.Descendants("item")
select new { Name = c.Element("name").Value };
foreach (var item in result)
{
Console.WriteLine(item.Name);
}