每组相关节点拆分XML

时间:2016-10-13 20:13:33

标签: xml

像csplit这样的CLI工具允许我们根据特定元素拆分XML文件。我想每组拆分XML文件。例如:

<prices>
  <price>
    <code>A123</code>
    <discount>123</discount>
  </price>
  <price>
    <code>A123</code>
    <discount>123</discount>
  </price>
  <price>
    <code>B456</code>
    <discount>123</discount>
  </price>
</prices>
需要将

拆分为一个文件:

<price>
    <code>A123</code>
    <discount>123</discount>
</price>
<price>
    <code>A123</code>
    <discount>123</discount>
</price>

和另一个文件:

<price>
    <code>B456</code>
    <discount>123</discount>
</price>

我们可以通过使用流式XML解析器并将code-element的值与前一个值进行比较来生成新的XML文件(如果它们不相等)。但是,使用CLI工具的组合必须有一种更有效的方法。

1 个答案:

答案 0 :(得分:0)

您可以尝试xshXML::LibXML的包装:

open file.xml ;
$h := hash code /prices/price ;
for $code in { keys %$h } {
    $d := create prices ;
    xcp xsh:lookup('h', $code) into $d/prices ;
    save :f concat($code, '.xml') $d ;
}