使用xpath加入属性与节点值的多个连接在Teiid
问题描述:
这是我发布的问题的一个副本here 我只需要注意到这发生在teiid引擎的XMLTABLE中。我解析以下XML内容:使用xpath加入属性与节点值的多个连接在Teiid
<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运算符似乎没有用。 请你帮忙。
答
尝试下面的XPath
string-join(for $n in /AttributeSets/ItemAttributes/Creator return concat($n/@Role, ':',$n/text()),',')
记住的内调整选择的XPath按你的源代码树的上下文。我以为文档根目录因此
/AttributeSets/ItemAttributes/Creator
的说明文件字符串连接在W3C功能有相当类似的例子。
更新:
我想,我是接近的地方,因为这...作品,给我一个逗号分隔的角色列表:基于role1,role2所,Role3
认为你非常接近。我尝试了小调整到和这工作:
string-join(//ns2:Creator/concat(@Role, ':', ./text()), ', ')
出于某种原因,毗连运算似乎没有工作。
不确定,我用在线xpath测试仪here检查,它的工作原理完美。 Infact这个在线工具接受你的xap以及以下输出:
Creator OneRole1, Creator TwoRole2, Creator ThreeRole3
谢谢!两个版本都可以顺利地按照需要工作! –