如何基于非唯一XMLTag中包含的唯一值定义智能xPath,以与C#中的XmlNode.SelectNodes()方法一起使用?

时间:2018-10-29 22:42:44

标签: c# .net xml xpath

我有一个XML结构:

<Node>
    <SubId> 15 </SubId>
    <SubParam> someValue </SubParam>
</Node>
<Node>
    <SubId> 19 </SubId>
    <SubParam> someValue </SubParam>
</Node>
<Node>
    <SubId> 22 </SubId>
    <SubParam> someValue </SubParam>
</Node>

如果该节点内的SubId标签的值为15,我想选择该节点。

我当前的代码:

if (xPath.Contains("Node"))
{
    XmlNodeList fieldsToTest = root.SelectNodes(xPath);
    foreach (XmlNode field in fieldsToTest)
    {
        if (field.SelectSingleNode("SubId").InnerText.Equals("15"))
        {
          do something;
        } 
    }
}

是否有一种方法可以直接选择SubId为“ 15”的节点,而不选择所有Node元素,然后遍历列表?我的猜测是必须有一种为此目的定义智能xPath的方法。

2 个答案:

答案 0 :(得分:1)

只需使用此XPath:

//Node[SubId = 15]

答案 1 :(得分:1)

尝试以下表达式:

XmlNodeList fieldsToTest = root.SelectNodes("//Node[normalize-space(SubId) = '15']");

这应该选择示例XML文件的第一个Node元素。