Например, для следующего 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();
Там есть 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 для объектов, доступных вам.
Гораздо проще с 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;