-2

我有以下 XML 片段:

<topic>
  <data attribute1="1">some data 1<data>
  <data attribute1="1">some data x<data>
  <data2 type="sometype">some data 2</data2>
</topic>
<topic>
  <data attribute1="1">some data 1<data>
  <data attribute2="2">some data 2<data>
</topic>

我想从这些生成一个超级 XML 节点topics,以便最终输出是一个单一topic的元素,其中元素按属性、元素名称和值分组:

<topic>
  <data attribute1="1">some data 1<data>
  <data attribute1="1">some data x<data>
  <data2 type="sometype">some data 2</data2>
  <data attribute2="2">some data 2<data>
</topic>

实现这一目标的最佳方法是什么?我可以使用 XQuery 吗?我一直在玩http://basex.org/但运气不佳。

4

1 回答 1

1

在修改您的输入 XML 以使其成为具有根元素和关闭标记的有效 XML 文件后,如下所示

<root>
    <topic>
        <data attribute1="1">some data 1</data>
        <data attribute1="1">some data x</data>
        <data2 type="sometype">some data 2</data2>
    </topic>
    <topic>
        <data attribute1="1">some data 1</data>
        <data attribute2="2">some data 2</data>
    </topic>
</root>

您可以使用此 XQuery将元素的所有子节点合并<topic>到一个元素中:<topic>

let $file := doc("a.xml")/root 
return
  <topic>{for $item in $file/topic/* return $item}</topic>

它的输出是

<topic>
    <data attribute1="1">some data 1</data>
    <data attribute1="1">some data x</data>
    <data2 type="sometype">some data 2</data2>
    <data attribute1="1">some data 1</data>
    <data attribute2="2">some data 2</data>
</topic>

这与您的预期输出不同。但是因为您没有为输出指定任何规则,所以这是最好的。

于 2020-03-06T21:41:14.707 回答