我无法选择具有以特定值结尾的属性的元素。
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);
但我找不到如何搜索属性名称的部分以及如何获取目标参数的确切值。
答案 0 :(得分:4)
首先请注意,XML和XPath区分大小写,因此Object
与object
不同,Name
与name
不同。
此XPath 2.0表达式,
//object[ends-with(@name,'_1')]
将选择object
属性值以name
结尾的所有_1
个元素。
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>