如何使用xmlstarlet向xml添加元素和属性?

时间:2018-10-11 16:07:48

标签: shell xmlstarlet

这是我的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>

1 个答案:

答案 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是否存在