使用以下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"
如何设置此条件?
答案 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