2014-09-24 84 views
0

屬性我有一個這樣的XML -Lambda表達式來選擇XML

<root> 
    <child at1="1Dragon" at2="2"> 
     ... 
    </child> 
</root> 

我想查詢AT1屬性並檢查它是否在字符串中有1個。爲此,我寫了這個lambda表達式 -

XDocument xml = XDocument.Parse(my_xml); 
bool test = xml.Descendants("child").Attributes("at1").ToString().Contains("1"); 

現在,這並沒有給我想要的結果。屬性列表確實有at1和at2,但我如何查詢它們?

感謝

回答

2

所以您的查詢的這部分返回子節點的屬性的枚舉,匹配名稱「AT1」。

xml.Descendants("child").Attributes("at1") 

這個調用toString調用了IEnumerable的默認的ToString實現,這是不是你想要的。您需要調用LINQ擴展方法來遍歷屬性並檢查任何屬性的值是否匹配。 Any似乎是一個很好的匹配:

bool test = xml.Descendants("child").Attributes("at1").Any(attribute => 
    attribute.Value.Contains("1")); 
1

你不能爲Attributes("at1").ToString();返回表示當前對象,它是一個IEnumerable<string> litteraly返回

如果你只有一個Child,你可以做這樣的事情

字符串
bool testVallue = xml.Descendants("child").Attributes("at1").FirstOrDefault().Value.Contains("1"); 

如果你希望所有的孩子的所有屬性,只是這樣做

var allVallue = xml.Descendants("child").Attributes("at1").Where(att => att.Value.Contains("1")); 
//you can then check 
     if (allVallue.Any()) 
     { 

     }