如何生成超级XML节点
How to generate a super XML node
我有以下 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>
我想从这些 topics
生成一个超级 XML 节点,这样最终输出是单个 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/ 但运气不佳。
修改您的输入 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>
这与您的预期输出不同。但是因为您没有为输出指定任何规则,所以这已经很好了。
我有以下 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>
我想从这些 topics
生成一个超级 XML 节点,这样最终输出是单个 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/ 但运气不佳。
修改您的输入 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>
这与您的预期输出不同。但是因为您没有为输出指定任何规则,所以这已经很好了。