2014-03-25 39 views
2

我需要它的屬性之一的值來搜索一個子節點,例如說我有這樣的XML如何搜索具有特定屬性值的XElement?

<Root> 
    <Child Name="1" foo="a"/> 
    <Child Name="2" foo="a"/> 
    <Child Name="3" foo="b"/> 
    <Child Name="4" foo="c"/> 
    <OhterTag/> 
</Root> 

我想和值2,提取與屬性名稱的子節點。 。 。我想要整個節點不僅僅是節點的標籤。

我已經試過這樣的事情

root.Elements("Attr").Where(child => child.Attribute("Name").Value == "2"); 

,但我沒有工作

回答

3

使用該元素的名稱,這是「孩子」,它應該工作,你有它的方式......而且,由於.Where在這種情況下返回一個IEnumerable<XElement>,以得到該元素,最後使用.First()

root.Elements("Child") 
    .Where(child => child.Attribute("Name").Value == "2") 
    .First() 

...或者你可以用與.First()

root.Elements("Child") 
    .First(child => child.Attribute("Name").Value == "2") 

最後,你可以在使用的情況下.FirstOrDefault()謂詞的節點不存在,避免空引用例外,如每在下面的評論的討論,通過@HamletHakobyan

root.Elements("Child") 
    .FirstOrDefault(child => child.Attribute("Name").Value == "2") 
+0

使用'FirstOrDefault'來避免異常。 –

+0

全部取決於應用程序設計和預期輸入,但是,這也是一種選擇。 –

+1

如果有問題使用術語'搜索',所以它適用'沒有找到'答案:) –

1

可以,如果你想,實現使用0123相同的建議-

using System.Xml.XPath; 

// ... 

XElement result = root.XPathSelectElement("//Child[@Name='2']");