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