xmlstarlet: запрос значения, если присутствует другое значение

Вот мой XML-файл, где я пытаюсь запросить и распечатать список всех идентификаторов в файле, где avtivebyDefault установлен в true,

Для этого использую xmlstarlet sel со следующими параметрами:

$ xmlstarlet sel -N x=http://maven.apache.org/POM/4.0.0 -t -m '/x:project/x:profiles/x:profile/x:activation[x:activeByDefault="true"]' -v /x:project/x:profiles/x:profile/x:id pom.xml | sort -u aaa alto bgpcep bier coe controller daexim distribution dlux dluxapps eman faas genius groupbasedpolicy honeycombvbd infrautils jsonrpc l2switch lispflowmapping nemo netconf netvirt neutron nic ocpplugin odlparent ofconfig openflowplugin ovsdb p4plugin packetcable sfc snmp snmp4sdn sxp tsdr unimgr usc vtn vtnaaa

Здесь есть две проблемы, во-первых, он печатает все идентификаторы, даже если они установлены как false и второй concats, печатая первый и последний идентификатор вместе (например, vtnaaa из последней строки вывода, что неверно). Чего мне не хватает в моем запросе?

1 ответ

Решение

Попробуйте изменить эту часть команды:

-m '/x:project/x:profiles/x:profile/x:activation[x:activeByDefault="true"]' -v /x:project/x:profiles/x:profile/x:id 

к этому:

-m '/x:project/x:profiles/x:profile[x:activation/x:activeByDefault="true"]/x:id' -v .

Чтобы разделить значения, попробуйте использовать либо -n для перевода строки или измените -v на -v concat(.,' ') для пространства.

Пример...

$ xmlstarlet sel -N x="http://maven.apache.org/POM/4.0.0" -t -m "/x:project/x:profiles/x:profile[x:activation/x:activeByDefault='true']/x:id" -v . -n pom.xml
aaa
alto
bgpcep
bier
coe
controller
daexim
distribution
dlux
dluxapps
genius
groupbasedpolicy
honeycombvbd
infrautils
jsonrpc
l2switch
lispflowmapping
nemo
netconf
netvirt
neutron
odlparent
ofconfig
openflowplugin
ovsdb
p4plugin
packetcable
sfc
snmp
snmp4sdn
sxp
tsdr
usc
vtn
Другие вопросы по тегам