Я использую версию xmlstarlet для Windows для обновления XML-файла через пакетный файл Windows.
xml edit --update "/xml/table/rec[@id=3]/@id" --value 10 %xmlfile%
Я ожидал, что это обновит атрибут id узла rec до 10. Когда я запускаю это, я вижу обновленный xml, как и ожидалось, в командной строке, но файл никогда не обновляется.
Как я могу это сделать, я не хочу переписывать весь файл, так как файл может быть большим.
перед обновлением:
<?xml version="1.0"?>
<xml>
<table>
<rec id="1" />
<rec id="2" />
<rec id="3" />
</table>
</xml>
после обновления:
<?xml version="1.0"?>
<xml>
<table>
<rec id="1" />
<rec id="2" />
<rec id="10" />
</table>
</xml>
sed -i
(на месте) по-прежнему записывает данные в новое место на диске, а затем удаляет старый файл. Я думаю, то же самое верно и для инструментов XML. Я был бы очень удивлен, если быxmlstarlet
работал по-другому. Удачи. - person shellter   schedule 25.03.2015<xml><table><rec id="3"/></table></xml>
достаточно, чтобы воспроизвести проблему — атрибутid
изменен, но вывод выводится на стандартный вывод, а не обратно в файл. - person Tom Fenech   schedule 25.03.2015