我有基于Microsoft文档的此代码。
string xml =
"<products>" +
"<product name=\"p1\">" +
"<market name=\"m1\">" +
"<areacode>12345</areacode>" +
"<areacode>12346</areacode>" +
"</market>" +
"<market name=\"m2\">" +
"<areacode>12345</areacode>" +
"<areacode>13346</areacode>" +
"</market>" +
"<market name=\"m3\">" +
"<areacode>12346</areacode>" +
"<areacode>13346</areacode>" +
"</market>" +
"</product>" +
"<product name=\"p2\">" +
"<market name=\"m1\">" +
"<areacode>12340</areacode>" +
"<areacode>12346</areacode>" +
"</market>" +
"<market name=\"m2\">" +
"<areacode>12340</areacode>" +
"<areacode>13346</areacode>" +
"</market>" +
"<market name=\"m3\">" +
"<areacode>12346</areacode>" +
"<areacode>13346</areacode>" +
"</market>" +
"</product>" +
"</products>";
XElement prods = XElement.Parse(xml);
IEnumerable<XElement> els =
from e1 in prods.Elements("product")
where
(string)e1.Attribute("name") == "p1" &&
(
from e2 in e1.Elements("market")
where
(
from e3 in e2.Elements("areacode")
where e3.Value == "12345"
select e3
).Any()
select e2
).Any()
select e1;
foreach (XElement el in els)
Console.WriteLine(el);
输出为
<product name="p1">
<market name="m1">
<areacode>12345</areacode>
<areacode>12346</areacode>
</market>
<market name="m2">
<areacode>12345</areacode>
<areacode>13346</areacode>
</market>
<market name="m3">
<areacode>12346</areacode>
<areacode>13346</areacode>
</market>
</product>
如何从输出中排除没有指定区号的市场?如果符合条件,其余的代码都需要产品名称,市场名称和区号。
由于无法直接过滤子级,因此没有简单的方法来创建具有所需内容的新树。但是,您可以修改树: