例如,对于以下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();
答案 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;