【发布时间】:2023-03-23 04:35:01
【问题描述】:
我正在使用 windows 版本的 xmlstarlet 通过 windows 批处理文件更新 xml 文件。
xml edit --update "/xml/table/rec[@id=3]/@id" --value 10 %xmlfile%
我希望这会将 rec 节点的 id 属性更新为 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>
【问题讨论】:
-
大多数shell工具不支持就地更新数据。例如
sed -i(就地)选项仍在将数据写入磁盘上的新位置,然后删除旧文件。我认为 XML 工具也是如此。如果xmlstarlet的工作方式有所不同,我会感到非常惊讶。祝你好运。 -
请显示更新前后的 XML 文档。
-
@Mathias 原则上我当然同意你的观点,即显示输入是好的,但这里的问题是就地编辑。
<xml><table><rec id="3"/></table></xml>文件足以重现该问题 -id属性已修改,但输出将打印到标准输出,而不是返回到文件。 -
@TomFenech 我也同意你的观点,但有时 OP 并没有提供可靠或完整的信息来说明发生了什么——例如,XML 文档可能格式不正确,但他们没有提到.
标签: xml bash xmlstarlet