加入与节点值的属性的多个级联使用XPath
我有以下XML内容:加入与节点值的属性的多个级联使用XPath
<ns2:ItemAttributes xml:lang="de-DE">
<ns2:Creator Role="Role1">Creator One</ns2:Creator>
<ns2:Creator Role="Role2">Creator Two</ns2:Creator>
<ns2:Creator Role="Role3">Creator Three</ns2:Creator>
</ns2:ItemAttributes>
我试图格式化和使用XPath结合这成一行。 喜欢的东西:
string-join(//ns2:Creator/concat(./text(), @Role), ', ')
我想,我是接近的地方,因为这个:
string-join(//ns2:Creator/@Role , ', ')
的作品,给我一个逗号分隔的角色列表:基于role1,role2所,Role3
这
string-join(//ns2:Creator/node(), ', ')
结合创作者的值:“创建者之一,创建者Ť我,造物主三“。
我想的
Role1: Creator One, Role2: Creator Two, Role3: Creator Three
最终输出可否请你帮忙。
您需要选择@Role
作为第一个参数,以您的来电concat()
,并使用.
选择上下文节点的字符串值:
string-join($xml//ns2:Creator/concat(@Role, ': ', .), ', ')
相反的.
你也可以使用string()
或string(.)
这做明确的,否则将发生隐式转换:
string-join($xml//ns2:Creator/concat(@Role, ': ', string(.)), ', ')
返回:
Role1: Creator One, Role2: Creator Two, Role3: Creator Three
谢谢,但由于某种原因,在这种情况下,我没有得到价值。输出成为:“:,:” 因此,它捕获了两个项目,冒号与空白,但没有获得值 –
@EugeneBykov然后我怀疑你已经改变了一些关于查询或数据,因为我测试了这个在你提供的相同数据中你的问题和输出是正确的。 – wst
这是在teiid sql中,可能是这个问题... concat处理例如... –
使用下面的代码更加接近:string-join(// ns2:Creator /(@ Role,node()),',') 现在我拥有所有的值,但不是那么漂亮 - 它们都是逗号 - 分离 –