【发布时间】:2020-07-09 07:01:16
【问题描述】:
我是 xml 和 xquery 的新手。我有一个 xml 文档,其中有多个 TEXT_LINE 用于同一行项目。我想将这些多个 TEXT_LINE 数据合并为基于 PO_ITEM 的单个评论。 在这里, PO_ITEM 00020 有两个 TEXT_LINE 标签,我需要将它们合并为一个。 PO_ITEM 00030 也一样。
<XI_PO_TEXTS>
<PO_ITEM>00020</PO_ITEM>
<TEXT_LINE>this is comment one</TEXT_LINE>
</XI_PO_TEXTS>
<XI_PO_TEXTS>
<PO_ITEM>00020</PO_ITEM>
<TEXT_LINE>tis is comment two</TEXT_LINE>
</XI_PO_TEXTS>
<XI_PO_TEXTS>
<PO_ITEM>00030</PO_ITEM>
<TEXT_LINE>this is comment three </TEXT_LINE>
</XI_PO_TEXTS>
<XI_PO_TEXTS>
<PO_ITEM>00030</PO_ITEM>>
<TEXT_LINE>this is comment four</TEXT_LINE>
</XI_PO_TEXTS>
我尝试过使用字符串连接,但它为每个 PO_ITEM 组合了所有 4 行。
`string-join($Source/XI_PO_TEXTS[fn:data($Source/XI_PO_TEXTS/PO_ITEM)=fn:data($comment/PO_ITEM)]/TEXT_LINE,'')`
请建议查询应该如何合并行 cmets 属于特定 PO_ITEM?
【问题讨论】:
-
我不太明白您的目标是什么,将预期的输出添加到您的答案中可能会有所帮助,即转换后的 xml。
-
在 XQuery 3.0 或 3.1 中,这是一个标准的教科书分组示例,因此请查看您最喜欢的关于使用
for $text in //XI_PO_TEXTS group by $item := $text/PO_ITEM return <XI_PO_TEXTS>{head($text)/PO_ITEM, <TEXT_LINE>{data($text/TEXT_LINE)}</TEXT_LINE>}</XI_PO_TEXTS>进行分组的 XQuery 介绍。
标签: xml comments xquery string-concatenation