示例:
<Item name="item1">
<mode = "ax, bx" />
</Item>
<Item name="item2">
<mode = "bx, cx" />
</Item>
<Item name="item3">
<mode = "cx, dx" />
</Item>
在上面的例子中,我想提取所有模式包含"cx"的项目。
提前感谢!
示例中的XML格式不正确。假设你的意思是:
<Items>
<Item name="item1">
<mode>ax, bx</mode>
</Item>
<Item name="item2">
<mode>bx, cx</mode>
</Item>
<Item name="item3">
<mode>cx, dx</mode>
</Item>
</Items>
你可以做:
var els=from el in XDocument.Parse(inxml).Descendants("Item")
where el.Element("mode").Value.Contains("bx")
select el;
这不是合法的XML(模式是一个元素名称,您可以将其设置为字符串(,但您应该能够这样做,假设您匹配的字符串是元素值:
doc.Descendants("Item").Where( item => item.Elements("mode").Any( mode => mode.Value.Contains("cx")));
假设一个格式良好的XML文档:
<Items>
<Item name="item1">
<mode>ax, bx</mode>
</Item>
<Item name="item2">
<mode>bx, cx</mode>
</Item>
<Item name="item3">
<mode>cx, dx</mode>
</Item>
</Items>
这样做:
XElement items = XElement.Load(@"C:items.xml");
var filteredItems = from item in items.Descendants("Item")
where item.Element("mode").Value.Contains("cx")
select item;
foreach (var item in filteredItems)
{
Console.WriteLine(item.FirstAttribute.Value);
}
输出:
item2
item3