假设我有以下XML文件:
<?xml version="1.0" encoding="UTF-8"?>
<response>
<project>
<ixGroup>105</ixGroup>
<sGroup>Place Group</sGroup>
</project>
<project>
...
我使用以下代码从中提取不同的<ixGroup>
和<sGroup>
文本值:
XDocument doc = XDocument.Load(@"C:\temp\xmlParse2.xml");
var projects = (from project in doc.Descendants("project")
select new {
id = project.Element("ixGroup").Value,
name = project.Element("sGroup").Value
}).Distinct();
foreach(var project in projects)
{
project.id.Dump("id");
project.name.Dump("name");
}
如果同一个xml文件有一个额外的元素,如下面添加的<projects>
:
<response>
<projects>
<project>
<ixGroup>105</ixGroup>
<sGroup>Place Group</sGroup>
</project>
<project>
...
如何修改上面的LINQ代码才能访问<project>
元素?
答案 0 :(得分:2)
您根本不需要修改代码。 Descendants
方法将根据需要在树下搜索,以便找到匹配的元素,这既可以是诅咒也可以是祝福。在您的情况下,即使添加中间<projects>
节点,所写的代码也将继续有效。
(仅搜索直接子方法的方法是Children()
。
答案 1 :(得分:2)
你不必。我刚刚测试了它,你当前的LINQ语句仍将返回所有<project>
元素,无论它们是否嵌套在<projects>
元素中。
答案 2 :(得分:0)
元素只搜索子节点,但是Descendants一直在树下。换句话说,你不必做任何事情。