Поиск тега XML по значению между ними и вставка нового тега в сценарий оболочки - PullRequest
0 голосов
/ 15 марта 2012

Допустим, у меня есть этот файл test.xml, который имеет следующее содержимое

<d>
  <p>
    <n>hi</n>
    <r>
      <s>1.0</s>
    </r>
  </p>

  <p>
    <n>hello</n>
    <r>
      <s>1.0</s>
    </r>
  </p>
</d>

Я хочу добавить новый 2.0 для объекта "привет", как показано ниже.1007 *

Я должен сделать это с помощью сценария оболочки.Существует способ поиска через XML DOM и добавления тегов с использованием xmlstarlet, приведенный здесь http://www.technomancy.org/xml/add-a-subnode-command-line-xmlstarlet/.Но это только описывает добавление нового тега к определенным узлам на основе значения атрибута.У меня нет никаких атрибутов.Как мне это сделать ?Есть ли способ сделать это с помощью grep?

1 Ответ

3 голосов
/ 19 марта 2012
xmlstarlet ed -a '//p[n="hello"]/r/s' -t elem -n s -v 2.0 input.xml

Пояснение:

  • ed ==> изменить
  • -a ==> добавить
  • -t ==> тип
  • -n ==> имя
  • -v ==> значение
...