Linq to XML - 根据条件获取值

时间:2013-03-19 12:07:10

标签: c# .net linq linq-to-xml

我有一个XML如下:

<Nodes>
  <Node>
    <A>This is a dummy text {12345}</A>
    <B>Output Value</B>
  </Node>
  <Node>
    <A>This is another dummy text {3462832}</A>
    <B>Output Value</B>
  </Node>
</Nodes>

如果节点'A'中的文本包含密钥'12345'

,我正在使用Linq to XML并想要在节点'B'中选择输出值

请提供应该用于实现此目的的LINQ查询的输入。

谢谢!

2 个答案:

答案 0 :(得分:3)

这正是你想要的: -

var nodes = from n in xml.Descendants("Node")
                         .Where(x => x.Element("A").Value.Contains("12345")) 
            select n.Element("B").Value;

XML示例: -

<?xml version="1.0" encoding="utf-8"?>
<Nodes>
    <Node>
        <A>This is a dummy text {12345}</A>
        <B>Output Value</B>
    </Node>
    <Node>
        <A>This is a dummy text {12345}</A>
        <B>Output Value 2</B>
    </Node>
    <Node>
        <A>This is another dummy text {3462832}</A>
        <B>Output Value</B>
    </Node>
</Nodes>

将返回: -

Output Value Output Value 2

答案 1 :(得分:0)

或者与LINQ和XPath一起使用:

XDocument xdoc = XDocument.Load(path_to_xml);
var b = (string)xdoc.XPathSelectElement("//Node[contains(A,'12345')]/B");

返回第一个找到的元素匹配条件的值。如果您需要所有匹配项,请改用 XPathSelectElements