无法从XElement获取xml节点

时间:2011-12-16 16:53:42

标签: c# xml linq xelement

我真的需要帮助下面的where子句。

考虑这个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子句更改为“Last”,则返回零个元素。

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();

请帮忙。我真的被卡住了。

2 个答案:

答案 0 :(得分:0)

试试这个:

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

答案 1 :(得分:0)

x.Element返回第一个孩子;因为有许多,你需要使用“元素”而不是“元素”,你必须在其上进行迭代。