2011-12-16 159 views
0

我真的需要下面where子句的幫助。無法從XElement獲取xml節點

考慮這個XML

<name xmlns="http://www.imsglobal.org/xsd/imslip_v1p0"> 
<partname> 
    <typename> 
    <tyvalue>First</tyvalue> 
    </typename> 
    <text>Charles</text> 
</partname> 
<partname> 
    <typename> 
     <tyvalue>Last</tyvalue> 
    </typename> 
    <text>Ward</text> 
    </partname> 
</name> 

此代碼返回一個元素

List<XElement> xElements = xmlDocument.Descendants(Aw + "name"). 
Where(x => (x.Element(Aw + "partname").Element(Aw + "typename").Element(Aw + "tyvalue")).Value == "First"). 
Select(x => x.Element(Aw + "partname").Element(Aw + "text")).ToList(); 

但是,如果我改變where子句 「最後」,則返回零個元素。

List<XElement> xElements = xmlDocument.Descendants(Aw + "name"). 
Where(x => (x.Element(Aw + "partname").Element(Aw + "typename").Element(Aw + "tyvalue")).Value == "Last"). 
Select(x => x.Element(Aw + "partname").Element(Aw + "text")).ToList(); 

請幫忙。我很困難。

回答

0

試試這個:

List<XElement> xElements = xmlDocument.Descendants(Aw + "name") 
       .Descendants(Aw + "partname") 
       .Descendants(Aw + "typename") 
       .Descendants(Aw + "tyvalue") 
       .Where(x => x.Value == "Last") 
       .ToList(); 
+0

感謝您的回覆。我在回家的路上正在地鐵上,但星期一上午我會嘗試第一件事。 – FatAlbert 2011-12-16 17:27:19

0

x.Element返回第一個孩子;因爲有很多,你需要使用「元素」而不是「元素」,你必須迭代它。