如何使用 xmlstarlet 更新 xml 文件
how to update the xml file using xmlstarlet
我正在使用 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>
您没有显示您的输入文档,但我认为它是以下内容,取自 xmlstarlet documentation:
<xml>
<table>
<rec id="1">
<numField>123</numField>
<stringField>String Value</stringField>
</rec>
<rec id="2">
<numField>346</numField>
<stringField>Text Value</stringField>
</rec>
<rec id="3">
<numField>-23</numField>
<stringField>stringValue</stringField>
</rec>
</table>
</xml>
xmlstarlet 修改文件,但结果发送到标准输出,而不是保存在原始文件中。使用另一个选项 --inplace
就地修改文件:
$ xml ed --inplace -u "/xml/table/rec[@id='3']/@id" -v 5 rec.xml
然后:
$ cat rec.xml
<?xml version="1.0"?>
<xml>
<table>
<rec id="1">
<numField>123</numField>
<stringField>String Value</stringField>
</rec>
<rec id="2">
<numField>346</numField>
<stringField>Text Value</stringField>
</rec>
<rec id="5">
<numField>-23</numField>
<stringField>stringValue</stringField>
</rec>
</table>
</xml>
对了,这个问题好像问的跟this question很像。
EDIT:正如@npostavs 所建议的,此选项列在编辑帮助中:
$ xml edit --help
...
-L (or --inplace) - edit file inplace
...
我正在使用 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>
您没有显示您的输入文档,但我认为它是以下内容,取自 xmlstarlet documentation:
<xml>
<table>
<rec id="1">
<numField>123</numField>
<stringField>String Value</stringField>
</rec>
<rec id="2">
<numField>346</numField>
<stringField>Text Value</stringField>
</rec>
<rec id="3">
<numField>-23</numField>
<stringField>stringValue</stringField>
</rec>
</table>
</xml>
xmlstarlet 修改文件,但结果发送到标准输出,而不是保存在原始文件中。使用另一个选项 --inplace
就地修改文件:
$ xml ed --inplace -u "/xml/table/rec[@id='3']/@id" -v 5 rec.xml
然后:
$ cat rec.xml
<?xml version="1.0"?>
<xml>
<table>
<rec id="1">
<numField>123</numField>
<stringField>String Value</stringField>
</rec>
<rec id="2">
<numField>346</numField>
<stringField>Text Value</stringField>
</rec>
<rec id="5">
<numField>-23</numField>
<stringField>stringValue</stringField>
</rec>
</table>
</xml>
对了,这个问题好像问的跟this question很像。
EDIT:正如@npostavs 所建议的,此选项列在编辑帮助中:
$ xml edit --help
...
-L (or --inplace) - edit file inplace
...