Extracting and dumping elements using xmlstarlet
在这篇文章中,我发现了如何按内容选择元素。 效果很好!
但是每个值都没有: - (
这是我的xml:
<metainfo id="19120454-8234-47EB-B7FE-7691B53788DF" type="volume">
<id>
3138224245
</id>
<index>
1
</index>
<is-last>
1
</is-last>
<name>
asdf
</name>
<raw-archive-id>
6898476220317415805
</raw-archive-id>
<raw-archive-key>
977D7B4B-D234-4E95-8BE2-BE0F8E865701
</raw-archive-key>
<size>
54812566016
</size>
<slice-key/>
<timestamp>
1385742689568
</timestamp>
</metainfo>
通过id,index或timestamp进行选择非常有效。 (“xml”是windows版本中的命令...):
xml sel -t -c "/metabundle/metainfo[timestamp=1385742689568]" test.xml
但如果我想通过另一个标签选择,例如“name”或“raw-archive-key”,则会出现问题:
xml sel -t -c "/metabundle/metainfo[name=asdf]" test.xml
此命令不会产生任何输出。 在两个标签中,name和raw-archive-key都有字母数字字符。 如果我将“asdf”改为“01”,它就可以了!
那么如果它包含字母数字字符,如何按内容选择?
提前致谢!
答案 0 :(得分:2)
您需要引用字符串值,否则会查找名为asdf
的标记。此外,您必须使用normalize-space()忽略前导和尾随空格:
xml sel -t -c "/metabundle/metainfo[normalize-space(name)='asdf']" test.xml