根据条件LINQ TO XML C#选择元素

时间:2014-11-19 20:07:48

标签: c# linq-to-xml

我使用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)移动到其他位置而不是先过滤它

,则上面的工作正常

1 个答案:

答案 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);