Получить xmllint для вывода результатов xpath\n-separated, для выбора атрибута

Как я могу получить xmllint для вывода нескольких результатов селектора xpath для атрибутов "на строку"?

Возьмем этот пример:

  <?xml version="1.0" encoding="ISO-8859-1"?>
  <config>
          <tagX key1="value1 " key2=" value2"/>
          <tagY key3="value3" key4=" value4 "/>
  </config>


  $ xmllint example.xml --xpath "/config/*/@*"

Результат:

   key1="value1 " key2=" value2" key3="value3" key4=" value4 "

Я бы хотел получить:

   key1="value1 "
   key2=" value2"
   key3="value3"
   key4=" value4 "

Мне нужно разделить после четных кавычек, или есть какой-нибудь более простой способ сделать это?

Есть связанный с этим вопрос, о том же предмете, кроме него о том, что нужно выделить содержимое <tag>value</tag>, а не <tag attribute="value" />

Ответы

Ответ 1

Вы можете попробовать:

$ xmllint --shell inputfile <<< `echo 'cat /config/*/@*'`

Возможно, вам понадобится grep выход, чтобы отфильтровать нежелательные строки.

Ответ 2

Если это вариант, попробуйте вместо этого использовать xmlstarlet:

xmlstarlet sel -t -v "/config/*/@*" example.xml

Ответ 3

Вопрос старый, но поскольку я пришел к этому сообщению, чтобы найти решение той же проблемы, вот мое решение

В linux добавьте замену sed для разделения вывода:

$ xmllint example.xml --xpath "/config/*/@*" | sed "s| key|\nkey|g"

конечно, выражение подстановки зависит от вашей структуры xml и вашего запроса xpath.

И вы даже можете добавить номера строк в каждой строке, если добавить nl

$ xmllint example.xml --xpath "/config/*/@*" | sed "s| key|\nkey|g" | nl

Что дает

   1 key1="value1 "
   2 key2=" value2"
   3 key3="value3"
   4 key4=" value4 "