【发布时间】:2023-03-06 20:05:01
【问题描述】:
我正在尝试使用 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、文档中的所有部分以及文档所有部分中的所有项目组成。如果您尝试将 XML 层次结构重构为匿名对象,您将需要多个查询。在这种情况下,为什么不直接使用 XML?
标签: c# linq-to-xml