【发布时间】:2015-02-26 07:27:09
【问题描述】:
对于下面的示例 XML,我需要检查是否所有 /bookstore/book/price 都以“USD”结尾。
<bookstore>
<book category="COOKING">
<title lang="en">Everyday Italian</title>
<author>Giada De Laurentiis</author>
<year>2005</year>
<price>30.00USD</price>
</book>
<book category="CHILDREN">
<title lang="en">Harry Potter</title>
<author>J K. Rowling</author>
<year>2005</year>
<price>29.99USD</price>
</book>
</bookstore>
我使用的逻辑是
if(fn:substring(/bookstore/book//Salary/text(), fn:string-length(/bookstore/book//Salary/text())-2 ) = 'USD') then 'true' else 'false'
但它失败并显示“原因:net.sf.saxon.trans.XPathException:不允许将多个项目的序列作为 fn:substring() 的第一个参数”。 是的,解析器是正确的,因为 fn:substring() 只接受一个原子值,但我不知道如何实现这个场景。
请任何人解释一下在 XPath 中实现这个或任何函数/运算符的逻辑?
只是告诉你,我在 Linux 上运行的 java 代码支持 XPath 2.0。
谢谢
【问题讨论】:
-
count()通常不如具有自然快捷方式的表达式效率。请参阅我的答案中的详细信息。
标签: java regex xpath xpath-2.0