根据标记的值选择XML元素

时间:2013-06-22 22:13:47

标签: xml command-line kml xmlstarlet

我需要从包含颜色<Style>的KML中选择所有ccff00ff块。类似的东西:

<Style id="inline">
    <LineStyle>
        <color>ccff00ff</color>
        <width>5</width>
    </LineStyle>
</Style>

我一直在墙上敲打几个小时,这是我可以根据this discussion得到的最接近的

xmlstarlet sel -N 'ns=http://www.opengis.net/kml/2.2' -t -c '//ns:Style[.//ns:color[contains(text(), 'ccff00ff')]]' myplaces.kml

不幸的是,如果我将ccff00ff改为我想要的,它仍然匹配,所以我可以认为它根本不起作用!

1 个答案:

答案 0 :(得分:1)

'//ns:Style[.//ns:color[contains(text(), 'ccff00ff')]]'

行情不嵌套;在单个引号中使用双引号:

'//ns:Style[.//ns:color[contains(text(), "ccff00ff")]]'

您链接的示例反过来引用了引号,因为cmd.exe无法将单引号识别为引号字符。由于bash确实将双引号识别为引用字符,你可以这样做,但它们是“软引号”,所以你可能遇到一些麻烦。就XPath而言,两种引用类型完全相同。