这是一项简单的任务,但我无法使其发挥作用。给出以下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()) { //...}
对于任何tipps来说,我看不出问题......: - /
答案 0 :(得分:4)
您的第一次尝试是要求所有Descendants
调用 product
。您的第二次尝试是查找名为product
的所有后代的直接子节点。
它可能在根元素中寻找的后代...如果您知道根元素被称为product
,您可以使用:
foreach (var item in meteoDoc.Root.Descendants())
(我无法测试您现有的代码,以确切了解为什么它现在不适合您,我很害怕。)
请注意,Descendants
只会找到后代元素 - 如果您想要所有后代节点,则需要DescendantNodes
方法。
答案 1 :(得分:1)
使用此:
XDocument meteoDoc = XDocument.Load("data.xml");
foreach (var item in meteoDoc.Root.Descendants())
{
// ...
}
答案 2 :(得分:0)
试试这个:
foreach (var item in meteoDoc.Descendants("product"))
{
foreach (var prod in item.Descendants())
{
// do something
}
}
答案 3 :(得分:0)
我对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);
}