这是我在此处发布的问题的非常副本, 我只需要注意这发生在 teiid 引擎的 XMLTABLE 中。我正在解析以下 xml 内容:
<AttributeSets>
<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>
</AttributeSets>
使用
Select * From
XMLTABLE(XMLNAMESPACES( DEFAULT 'http://ns1',
'http://ns2/default.xsd' as ns2 ),
'AttributeSets/ns2:ItemAttributes' PASSING x.AttributeSets
COLUMNS
Creator STRING PATH 'string-join(//ns2:Creator/(@Role, node()) , '', '')'
) p;
这里 x.AttributeSets 是一个 xml 类型的变量,其内容来自上面。
我正在尝试使用 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
我能得到的最多是:
string-join(//ns2:Creator/(@Role, node()) , ', ')
这用逗号将所有角色和创建者分隔为一行。由于某种原因, concat 运算符似乎不起作用。能否请你帮忙。