Проверьте, существует ли XElement с определенным значением

1

Например, для следующего 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 " узел " Order " со значением "City2" в дочернем узле " City ".

Следующий код возвращает, существует ли XElement City, но не проверяет его значение. Как я могу его обновить, чтобы он соответствовал моему запросу?

bool exists = Tree.Elements("Order").Elements("City").Any();
Теги:
linq
xelement

2 ответа

4
Лучший ответ

Там есть Any перегрузка, которая принимает предикат, поэтому вам просто нужно использовать это:

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

В качестве альтернативы, используйте Where before Any:

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

В принципе, просто помните, что у вас есть все LINQ для объектов, доступных вам.

  • 0
    Спасибо за ваш четкий ответ. В чем разница между двумя фрагментами кода?
  • 0
    @ user3165438: Первый более компактный и немного более эффективный, но он эквивалентен с точки зрения эффекта.
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;

Ещё вопросы

Сообщество Overcoder
Наверх
Меню