我使用LINQ TO XML查询XML。我想基于一些条件检查查询记录这里是我的XML下面:XML将有多个订单,每个订单将在我想要选择的顺序,其中param节点属性存储值不为null,如果存在应该是1并且还订购纸箱信息...
<orders>
<order>
<criteria>
<param name="location">123</param>
<param name="name">Chicago</param>
<param name="Store">1</param>
<param name="Account Number">1212121212</param>
</criteria>
<items>
<item> </item>
<item> </item>
</items>
<cartons>
<carton>
<size> </size>
<weight></weight>
</carton>
</cartons>
</order>
<Order>
</Order>
</orders>
我能做到这一点:
var result = from item in doc.Descendants("order")
where item.Element("criteria").Element("param").Attribute("name").Value.Contains("store") == true
&& item.Element("cartons") != null
select item;"
如果我的store(param)属性在过滤器节点中是第一个但是如果我将商店(param)移动到其他位置而不是先过滤它
,则上面的工作正常答案 0 :(得分:5)
问题在于,您只需查看一个 param
元素 - 始终是第一个元素,因为这是Element
的作用。
如果任何参数是&#34;存储&#34;您想匹配值为1的元素,因此您要使用Any
方法并使用Elements
查找所有参数:
var query = from item in doc.Descendants("order")
where item.Element("criteria").Elements("param")
.Any(p => p.Attribute("name").Value == "Store" &&
(int) p == 1)
&& item.Element("cartons") != null
select item;
查询表达式并非真正帮助您 - 我会使用:
var query = doc.Descendants("order")
.Where(item => item.Element("criteria").Elements("param")
.Any(p => p.Attribute("name").Value == "Store" &&
(int) p == 1)
&& item.Element("cartons") != null);