使用XPath Expression迭代和连接

时间:2010-08-17 14:11:24

标签: java xpath

我有以下xml文件:

<author>
  <firstname>Akhilesh</firstname>
  <lastname>Singh</lastname>
</author>
<author>
  <firstname>Prassana</firstname>
  <lastname>Nagaraj</lastname>
</author>

我正在使用以下JXPath表达式

concat(author/firstName," ",author/lastName)

获取值Akhilesh Singh ,Prassana Nagaraj但是 我只得到Akhilesh Singh

我的要求是我应该通过只执行一个JXPath表达式来获得两个作者的价值。

3 个答案:

答案 0 :(得分:7)

XPath 2.0解决方案

/*/author/concat(firstname, ' ', lastname, following-sibling::author/string(', '))

答案 1 :(得分:3)

使用XPath 1.0时,如果期望节点集以外的参数类型,则选择节点集中的第一个节点,然后应用类型转换(布尔类型转换有些不同)。

所以,你的表达(注意:没有资本):

concat(author/firstname," ",author/lastname) 

它与:

相同
concat( string( (author/firstname)[1] ), " ", string( (author/lastname)[1] ) ) 

取决于您可以使用的主机语言:

author/firstname|author/lastname

这是按文档顺序评估为firstNamelastName的节点集,因此您可以迭代此节点集提取字符串值。

在XPath 2.0中,您可以使用:

string-join(author/concat(firstname,' ', lastname),' ,')

输出:

Akhilesh Singh ,Prassana Nagaraj

注意:现在,将序列数据类型和函数调用作为步骤,XPath类似于它声称的功能语言。高阶函数和部分应用必须等到XPath 2.1 ...

编辑:感谢Dimitre的评论,我已经更正了字符串分隔符。

答案 2 :(得分:0)

concat()将返回单个字符串。如果你想要两个结果,那么你需要迭代“author”元素并执行“concat(firstName," ",lastName)