给定 XML 实例:
<fruits>
<fruit>Apple</fruit>
<fruit>Orange</fruit>
<fruit>Banana</fruit>
</fruits>
我正在使用循环:
XPathExpression expr = xpath.compile("/fruits/fruit/text()");
NodeList nodes = (NodeList) expr.evaluate(doc, XPathConstants.NODESET);
for (int i = 0 ; i < nodes.getLength() ; i++)
System.out.println(nodes.item(i).getNodeValue());
打印水果名称列表。有没有办法在外部 XPath 表达式中使用小写字母,以便返回序列中的名称已经小写?我不想在每个项目上使用 String
toLowerCase()
Java 方法或调用 lower-case()
函数,如下所示:
System.out.println(xpath.compile("lower-case(.)").evaluate(nodes.item(i)));
...有没有一种方法可以在一个 XPath 表达式中实现这一目标,并且只为外循环计算一次?
我的 Ivy 文件中有以下 Saxon 依赖项,因此我还可以访问 XPath 2.0 功能:
<dependency org="net.sf.saxon" name="Saxon-HE" rev="9.4"/>
最佳答案
Java 仅支持 XPath 1.0
Plain Java 的 XPath 求值器不支持 XPath 2.0,因此您根本无法使用 fn:lower-case(...)
。对每个结果使用 Java 的 toLowerCase()
函数。
如果您有 XPath 2.0
如果您使用其他 XPath 引擎,则可以使用此表达式将每个水果名称转换为小写,并且仍然收到单个水果名称:
/fruits/fruit/text()/lower-case(.)
在 XPath 1.0 中模拟 fn:lower-case(...)
您所能做的就是使用 translate(some-string, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz')
,但这仅适用于单个值。
关于java - XPath lower-case() 获取小写值的集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17368189/