我是使用LINQ进行XML解析的新手。我有以下XML:
<TEAM Action="abcd" TeamID="1234">
<INST InstID="10001" />
<TERM Label="abc" Desc="" Default="" Type="string">Non</TERM>
<A>
<NOTE Label="a">U</NOTE>
<NOTE Label="b">69537f</NOTE>
<NOTE Label="c">Po</NOTE>
<NOTE Label="d">f59/NOTE>
<NOTE Label="e">2014</NOTE>
<NOTE Label="f">Non</NOTE>
<NOTE Label="g">Bilateral</NOTE>
<NOTE Label="h">Jo</NOTE>
<NOTE Label="i">602</NOTE>
</A>
</TEAM>
<TEAM Action="abcdefg" TeamID="2345">
<INST InstID="10003" />
<TERM Label="abc" Desc="" Default="" Type="string">Non</TERM>
<A>
<NOTE Label="a">U</NOTE>
<NOTE Label="b">69537f</NOTE>
<NOTE Label="c">Po</NOTE>
<NOTE Label="d">f59/NOTE>
<NOTE Label="e">2014</NOTE>
<NOTE Label="f">Non</NOTE>
<NOTE Label="g">Simple</NOTE>
<NOTE Label="h">Jo</NOTE>
<NOTE Label="i">602</NOTE>
</A>
</TEAM>
我正在尝试编写一个查询,该查询返回所有具有label = g的NOTE元素的值为双边的团队。 任何帮助都很受欢迎。
谢谢你的到来。
答案 0 :(得分:0)
首先,你发出的xml
是错误的,应该是
<TEAM Action="abcd" TeamID="1234">
<INST InstID="10001" />
<TERM Label="abc" Desc="" Default="" Type="string">Non</TERM>
<A>
<NOTE Label="a">U</NOTE>
<NOTE Label="b">69537f</NOTE>
<NOTE Label="c">Po</NOTE>
<NOTE Label="d">f59</NOTE>
<NOTE Label="e">2014</NOTE>
<NOTE Label="f">Non</NOTE>
<NOTE Label="g">Bilateral</NOTE>
<NOTE Label="h">Jo</NOTE>
<NOTE Label="i">602</NOTE>
</A>
</TEAM>
<TEAM Action="abcdefg" TeamID="2345">
<INST InstID="10003" />
<TERM Label="abc" Desc="" Default="" Type="string">Non</TERM>
<A>
<NOTE Label="a">U</NOTE>
<NOTE Label="b">69537f</NOTE>
<NOTE Label="c">Po</NOTE>
<NOTE Label="d">f59</NOTE>
<NOTE Label="e">2014</NOTE>
<NOTE Label="f">Non</NOTE>
<NOTE Label="g">Simple</NOTE>
<NOTE Label="h">Jo</NOTE>
<NOTE Label="i">602</NOTE>
</A>
</TEAM>
那么你需要的是:
var xml=XDocument.Load("d:\\test.xml");
var list=xml.Descendants("TEAM")
.Where(x=>x.Element("A").Elements("NOTE")
.Any(n=>n.Attribute("Label").Value=="g" && n.Value=="Bilateral"));