【发布时间】:2014-11-20 04:23:33
【问题描述】:
我正在使用 LINQ TO XML 查询 XML。我想根据一些条件检查来查询记录,下面是我的 XML: XML 将有多个订单,每个订单将在我想选择具有参数节点属性存储值不为空的订单,如果存在应该是 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) 属性位于过滤器节点的第一个位置,则上述操作正常,但如果我将 store(param) 移动到第一个位置以外的其他位置,它不会过滤它
【问题讨论】:
-
好的,这一切听起来都很合理——到目前为止你尝试过什么?你看过
XElement.Attribute方法和XElement.Element吗?例如...Where(x => x.Element("criteria").Elements("param").Any(p => (string) p.Attribute("name") == "Store" && (int) p.Value == 1)) -
好的,我有这个“ 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;"
-
请把它放到问题中,并解释它目前所做的和你想要它做什么之间的区别。
-
我确实将其添加到我的问题@JonSkeet
标签: c# linq-to-xml