使用xpath将多个属性连接与节点值连接起来

时间:2016-11-10 17:11:27

标签: xml xslt xpath xquery

我有以下xml内容:

<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(), ', ')

结合了创作者的价值观:&#34;创作者1,创作者2,创作者3&#34;。

我喜欢

的最终输出
Role1: Creator One, Role2: Creator Two, Role3: Creator Three
你能帮忙吗?

1 个答案:

答案 0 :(得分:0)

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