2011-04-14 49 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

元素只搜索子節點,但後人去一路下跌樹。換句話說,你不會做任何事情。