检查是否存在具有特定值的XElement

时间:2014-06-12 10:00:32

标签: c# xml linq xelement

例如,对于以下XML

 <Tree>   

   <Order>
     <Phone>1254</Phone>
     <City>City1</City>
     <State>State</State>
   </Order>  

   <Order>
    <Phone>765</Phone>
    <City>City2</City>
    <State>State3</State>
   </Order>   

  </Tree>

我可能想知道XElement&#34; Tree&#34;包含&#34; Order&#34;值为&#34; City2&#34;的节点在它的&#34; City&#34;子节点。

以下代码返回XElement City是否存在,但不检查其值,如何更新它以使其符合我的请求?

bool exists = Tree.Elements("Order").Elements("City").Any();

2 个答案:

答案 0 :(得分:4)

Any重载接受谓词,所以你只需要使用它:

bool exists = Tree.Elements("Order")
                  .Elements("City")
                  .Any(x => x.Value == "City2");

或者,在Where之前使用Any

bool exists = Tree.Elements("Order")
                  .Elements("City")
                  .Where(x => x.Value == "City2")
                  .Any();

基本上,请记住,您已经拥有了可用的LINQ to Objects。

答案 1 :(得分:0)

使用xpath

更简单
var xml=@"<Tree>      <Order>     <Phone>1254</Phone>         <State>State</State>   </Order>     <Order>    <Phone>765</Phone>    <City>City2</City>    <State>State3</State>   </Order>     </Tree>";

XElement root=XElement.Parse(xml); //XElement.Load(xmlfile);
var child=root.XPathSelectElements("//Order/City[text()='City2']");

请包括

using System.Xml.XPath;