加入与节点值的属性的多个级联使用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 

最终输出可否请你帮忙。

+0

使用下面的代码更加接近:string-join(// ns2:Creator /(@ Role,node()),',') 现在我拥有所有的值,但不是那么漂亮 - 它们都是逗号 - 分离 –

您需要选择@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 
+0

谢谢,但由于某种原因,在这种情况下,我没有得到价值。输出成为:“:,:” 因此,它捕获了两个项目,冒号与空白,但没有获得值 –

+0

@EugeneBykov然后我怀疑你已经改变了一些关于查询或数据,因为我测试了这个在你提供的相同数据中你的问题和输出是正确的。 – wst

+0

这是在teiid sql中,可能是这个问题... concat处理例如... –