2011-04-14 59 views
0

假设我有下面的XML文件:使用LINQ to 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文件有一个额外的元素like <projects>添加如下:

<response> 
    <projects> 
    <project> 
     <ixGroup>105</ixGroup> 
     <sGroup>Place Group</sGroup> 
    </project> 
    <project> 
     ... 

如何修改LINQ co德以上仍然访问<project>元素?

回答

2

你就不必。我只是测试它,和目前的LINQ语句仍然会返回所有<project>元素,无论它们是否会嵌套在<projects>元素中。

2

根本不需要修改代码。 Descendants方法将在树的尽可能远的地方搜索,以便找到匹配的元素,这可能既是诅咒也是祝福。就你而言,即使你添加了一个中间节点<projects>,写入的代码也会继续工作。

(该只搜索直接子方法的方法是Children()

0

元素只搜索子节点,但后人去一路下跌树。换句话说,你不会做任何事情。