这是我的xml:
$ cat job.xml
<job>
<file> </file>
</job>
我正在添加一个属性,这可行。
$ xmlstarlet edit --omit-decl --inplace --insert '//job/file' --type 'attr'\
-n 'type' --value 'text' --update '//job/file' --value file.txt job.xml\
$ cat job.xml
<job>
<file type="text">file.txt</file>
</job>
#Running again, this time I want it to replace if attribute is already present.
$ xmlstarlet edit --omit-decl --inplace --insert '//job/file' --type 'attr'\
-n 'type' --value 'bin' --update '//job/file' --value file.bin job.xml\
$ cat job.xml
<job>
<file type="text" type="bin">file.bin</file>
</job>
这次我希望使用<file type="bin">file.bin</file>
而不是<file type="text" type="bin">file.bin</file>
。
此外,即使元素根本不存在,我也喜欢添加元素,例如:
<job>
</job>
答案 0 :(得分:0)
嗯,您可能要先删除// job / file,然后重新添加它:
xmlstarlet edit --omit-decl \
--delete '//job/file' \
--subnode '//job' --type elem --name file --value file.bin \
--insert '//job/file' --type attr --name type --value bin \
job.xml
不管// job / file是否存在