Ответ 1
Вы можете попробовать:
$ xmllint --shell inputfile <<< `echo 'cat /config/*/@*'`
Возможно, вам понадобится grep
выход, чтобы отфильтровать нежелательные строки.
Как я могу получить 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" />
Вы можете попробовать:
$ xmllint --shell inputfile <<< `echo 'cat /config/*/@*'`
Возможно, вам понадобится grep
выход, чтобы отфильтровать нежелательные строки.
Если это вариант, попробуйте вместо этого использовать xmlstarlet:
xmlstarlet sel -t -v "/config/*/@*" example.xml
Вопрос старый, но поскольку я пришел к этому сообщению, чтобы найти решение той же проблемы, вот мое решение
В 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 "