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

本文关键字:XElement 是否 存在 检查 | 更新日期: 2023-09-27 18:08:13

例如以下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"Tree"是否在其"City"子节点中包含值为"City2"的"Order"节点。

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

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

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

有一个接受谓词的Any过载,所以你只需要使用它:

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

或者,在Any之前使用Where:

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

基本上,只要记住你已经拥有了LINQ to Objects的全部功能

使用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;