【问题标题】:I want to merge multiple line_comments into a single comment using xquery我想使用 xquery 将多个 line_comments 合并为单个注释
【发布时间】: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 &lt;XI_PO_TEXTS&gt;{head($text)/PO_ITEM, &lt;TEXT_LINE&gt;{data($text/TEXT_LINE)}&lt;/TEXT_LINE&gt;}&lt;/XI_PO_TEXTS&gt; 进行分组的 XQuery 介绍。

标签: xml comments xquery string-concatenation


【解决方案1】:

在 XQuery 3.0 或 3.1 中,这是一个使用 group by 的标准教科书分组示例:

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>

https://xqueryfiddle.liberty-development.net/gWmuPs5/1

【讨论】:

    猜你喜欢
    • 2018-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-15
    • 1970-01-01
    • 2015-04-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多