xmlstarlet:如何通过字母数字内容选择元素

时间:2014-02-04 09:49:24

标签: xml xmlstarlet

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”,它就可以了!

那么如果它包含字母数字字符,如何按内容选择?

提前致谢!

1 个答案:

答案 0 :(得分:2)

您需要引用字符串值,否则会查找名为asdf的标记。此外,您必须使用normalize-space()忽略前导和尾随空格:

xml sel -t -c "/metabundle/metainfo[normalize-space(name)='asdf']" test.xml