以下是我的xml file,我在其中查询并打印avtivebyDefault
设置为true
的文件中所有ID的列表。
为此我使用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
这里有两个问题,首先它打印所有id,即使它们被设置为false
,第二个是通过打印第一个和最后一个id(来自vtnaaa
输出的最后一行是不正确的)。我的查询中缺少什么?
答案 0 :(得分:0)
尝试更改命令的这一部分:
-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