属性值的XPath以字符串结尾?

时间:2018-02-18 15:14:24

标签: c# xml xpath

我无法选择具有以特定值结尾的属性的元素。

XML看起来像

<root>
<object name="1_2"><attribute name="show" value="example"></object>
<object name="1_1"><attribute name="show" value="example"></object>
<object name="2_1"><attribute name="show" value="example"></object>
</root>

所以我需要使用_1从对象中的属性中提取所有值,我该怎么做?

我做了这段代码

 XmlNodeList childnodes = xRoot.SelectNodes("//Object[@Name='1_1']");
        foreach (XmlNode n in childnodes)
            Console.WriteLine(n.SelectSingleNode("Attribute[@Name='show']").OuterXml);

但我找不到如何搜索属性名称的部分以及如何获取目标参数的确切值。

2 个答案:

答案 0 :(得分:4)

首先请注意,XML和XPath区分大小写,因此Objectobject不同,Namename不同。

XPath 2.0

此XPath 2.0表达式,

//object[ends-with(@name,'_1')]

将选择object属性值以name结尾的所有_1个元素。

XPath 1.0

XPath 1.0缺少ends-with()函数,但可以通过更多工作实现相同的结果:

//object[substring(@name, string-length(@name) - string-length(@name) +1) = '_1']

答案 1 :(得分:1)

如果C#支持XPath 2.0,您应该可以使用:

XmlNodeList childnodes = xRoot.SelectNodes("//object[ends-with(@name, '_1')]");

如果没有,那么稍长的版本应该有效:

XmlNodeList childnodes = xRoot.SelectNodes("//object[substring(@name, string-length(@name) - 1) = '_1']");

此外,您的xml无效,因为您需要关闭attribute元素:

<root>
  <object name="1_2"><attribute name="show" value="example"/></object>
  <object name="1_1"><attribute name="show" value="example"/></object>
  <object name="2_1"><attribute name="show" value="example"/></object>
</root>