2011-12-16 96 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返回第一个孩子;因为有很多,你需要使用“元素”而不是“元素”,你必须迭代它。