gpt4 book ai didi

c# - LINQ to XML 选择子元素

转载 作者:太空狗 更新时间:2023-10-29 22:35:10 26 4
gpt4 key购买 nike

我正在尝试使用 LINQ to XML 将 XML 文件中的信息提取到对象中。虽然我可以返回文档和部分 Id 属性,但我无法访问每个部分元素的项目,它返回文档中所有项目的 IEnumerable。我知道这是正确的,因为我正在调用 Descendants,但我正在努力让它只返回每个部分元素的子项。有人可以帮忙吗?

XML 文档

<root>
<document id="1">
<section id="1.1">
<item id="1.1.1"></item>
<item id="1.1.2"></item>
<item id="1.1.3"></item>
</section>
<section id="1.2">
<item id="1.2.1"></item>
<item id="1.2.2"></item>
</section>
</document>
</root>

LINQ 查询

XElement documentRoot = XElement.Load("document.xml");
var documents = (from docs in documentRoot.Descendants("document")
select new
{
Id = (string) docs.Attribute("id"),
Sections = docs.Elements("section"),
Items = docs.Elements("section").Elements("item")
}).ToList();

foreach(var doc in documents)
{
foreach(var section in doc.Sections)
{
Console.WriteLine("SectionId: " + section.Attribute("Id"));
foreach(var item in doc.Items)
{
Console.WriteLine("ItemId: " + section.Attribute("Id"));
}
}
}

最佳答案

您在属性 Id 和项目循环中有一些小错别字。但是,如果您试图将所有部分项目放入该项目集合中,那么您在设计级别就错了,因为 Items 应该是 Section 属性,而不是 文档(因此您需要查询 XML 两次)。

或者,您可以执行以下操作:

var documents =
(from docs in documentRoot.Descendants("document")
select new
{
Id = (string) docs.Attribute("id"),
Sections = docs.Elements("section")
}).ToList();

foreach (var doc in documents)
{
foreach (var section in doc.Sections)
{
Console.WriteLine("SectionId: " + section.Attribute("id"));
foreach (var item in section.Elements("item"))
{
Console.WriteLine("ItemId: " + item.Attribute("id"));
}
}
}

输出:

SectionId: id="1.1"ItemId: id="1.1.1"ItemId: id="1.1.2"ItemId: id="1.1.3"SectionId: id="1.2"ItemId: id="1.2.1"ItemId: id="1.2.2"

关于c# - LINQ to XML 选择子元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2089799/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com