我有以下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
表达式来获得两个作者的价值。
答案 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
这是按文档顺序评估为firstName
和lastName
的节点集,因此您可以迭代此节点集提取字符串值。
在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)
”