如何使用LINQ查询为包含特定子字符串的一个属性/字段筛选XML元素



示例:

<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

最新更新