需要XPath的ends-with函数

5
我有些困难,无法让XPath函数起作用。我想要从XML文件中仅获取名称以字母'z'结尾的条目,但是我无法使其工作。我正在使用xmllint命令来操作cat命令处理的文件。
“ends-with()”只适用于XPath 2.0版本,我很确定服务器只有XPath 1.0版本,所以我尝试输入以下命令:
cat //country/city[substring(@name, string-length(@name) - string-length('z') +1)]/name

但是我一直遇到错误,不确定是我的写法有误还是这不是正确的方法。

2个回答

3

这应该可以正常工作:

//country[substring(@name, string-length(@name)) = 'z']

我需要使用规范化空格。你有什么想法如何在子字符串函数周围进行格式化吗? - BMitrano825
@BMitrano825 在所有 substring() 中使用它,例如 substring(normalize-space(@name), string-length(normalize-space(@name))) 中的所有 @name - har07

3

您的XPath缺少检查substring()的返回值是否等于期望的字符串结尾值"z"的步骤。因此,正确的XPath应该是:

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

既然 -string-length('z')+1 等于 0,那一部分可以省略,得到一个更简单的XPath,类似于 @Kirill Polishchuk另一个答案中发布的。


这就是大部分了。我不得不做一些更改,但这是我的最终答案。 cat //country/city[substring(normalize-space(name), string-length(normalize-space(name)) – string-length(‘z’)+1) = ‘z’]/name - BMitrano825

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接