鉴于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表达式中使用lower-case
,以便返回的序列中的名称已经小写?我不想使用String
toLowerCase()
Java方法或在每个项目上调用lower-case()
函数,如下所示:
System.out.println(xpath.compile("lower-case(.)").evaluate(nodes.item(i)));
...有没有办法在一个XPath表达式中实现它,只对外部循环计算一次?
我的常春藤文件中有以下Saxon依赖项,因此我也可以访问XPath 2.0功能:
<dependency org="net.sf.saxon" name="Saxon-HE" rev="9.4"/>
答案 0 :(得分:2)
Plain Java的XPath评估程序不支持XPath 2.0,因此您根本无法使用fn:lower-case(...)
。对每个结果使用Java的toLowerCase()
函数。
如果您正在使用其他一些XPath引擎,您可以使用此表达式将每个水果名称转换为小写,并仍然接收单个水果名称:
/fruits/fruit/text()/lower-case(.)
fn:lower-case(...)
您所能做的只是使用translate(some-string, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz')
,但这仅适用于单个值。