Linq to XML withing with predicates

时间:2011-10-20 21:22:09

标签: xml linq linq-to-xml

使用以下xml,当{且仅当str/@itemNo

时,我如何按arr[@name = 'ATR_IsFamily'] / str = 1对以下内容进行分组
<root>
  <doc>
    <arr name="ATR_IsFamily">
      <str>0</str>
    </arr>
    <arr name="ATR_VendorId">
      <str>I23</str>
    </arr>
    <str name="itemNo">ABCDEFGHIJ</str>
  </doc>
  <doc>
    <arr name="ATR_IsFamily">
      <str>1</str>
    </arr>
    <arr name="ATR_VendorId">
      <str>I23</str>
    </arr>
    <str name="itemNo">123456789</str>
  </doc>
</root>

这是我到目前为止所做的:

var searchResults = from rt in element.Descendants("doc").Descendants("str")
    where (String)rt.Attribute("name") == "itemNo" 
        && rt.Parent.Descendants("arr").ElementAt(1).Value == "1"
    group rt by new { d = (String)rt.Value.Substring(0,6) } into grp
    select grp;

这种情况是我陷入困境的地方:

rt.Parent.Descendants("arr").ElementAt(1).Value == "1"

如何设置此条件?

1 个答案:

答案 0 :(得分:2)

夫妻俩:

  • rt.Parents.Descendants(“arr”)将返回一个IEnumerable&lt; XElement&gt;有两个项目。通过使用.ElementAt(1),您将选择第二个元素,即ATR_VendorId。你想要.ElementAt(0)。

  • 其次,您要在&lt; arr&gt;下面选择str节点。元素,所以你可能想要像rt.Parents.Descendants(“arr”)这样的东西.ElementAt(0).Element(“str”)。Value