Как добавить элемент и атрибут в XML с помощью xmlstarlet? - PullRequest
0 голосов
/ 11 октября 2018

Вот мой 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 голосов
/ 11 октября 2018

Хм, вы можете сначала удалить // задание / файл, а затем повторно добавить его:

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

Это сработает независимо от наличия // задания / файла

...