xmlstarlet不适用于字符串锚$的结尾

时间:2016-02-15 18:35:58

标签: xml xpath attributes xmlstarlet

使用xmlstarlet显示的xpath语句,它不支持字符串锚点的结束,并选择' aaa'和' bbb'。如何构造xpath语句以匹配以998结尾的属性?

Xpath声明:

-v "../Property[contains(@Name, '998$')]

XML数据

<Object>
<Property Name="1230-02324998">
<Value>aaa</Value>
</Property>
<Property Name="3223-99824993">
<Value>bbb</Value>
</Property>
</Object>

2 个答案:

答案 0 :(得分:1)

contains函数没有任何正则表达式支持。使用Property[substring(@Name, string-length(@Name) - 2) = '998']

答案 1 :(得分:0)

  

试过这个:xmlstarlet sel -B -t -m&#34; // Object&#34; -v&#34; ..属性[substring(@Name,string-length(@Name) - 2)=&#39; 998&#39;]&#34;答案应该是:&#34; aaa&#34;,但它没有用。

在shell中输入问题的答案时请务必小心。 Martin Honnen没有告诉你用..开始表达,这使得表达式无效。

鉴于您的XML输入存储在名为&#34; object.xml&#34;的XML文档中:

$ xml sel -B -t -m "Object" -v "Property[substring(@Name, string-length(@Name) - 2) = '998']" object.xml
aaa