#xml
#xml
Вопрос:
Инструменты CLI, такие как csplit, позволяют нам разделять 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 и сравнивая значение элемента кода с предыдущим и генерируя новые XML-файлы, если они не равны. Однако должен быть более эффективный способ с использованием комбинации инструментов CLI.
Ответ №1:
Вы можете попробовать xsh, оболочку вокруг XML::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 ;
}
Комментарии:
1. Спасибо за предложение. Я вижу, что последний выпуск был в 2008 году, и он даже не будет компилироваться.
2. Я выпустил его 26 августа этого года. Вы нажали правильную ссылку?