2013-06-22 18 views
0

我需要从KML中选择包含颜色ccff00ff的所有<Style>块。喜欢的东西:根据标签的值选择XML元素

<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
'//ns:Style[.//ns:color[contains(text(), 'ccff00ff')]]' 

行情不嵌套;使用双引号单的人里面:

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

您链接的例子有其他方式报价,因为cmd.exe不承认单引号作为引用字符。由于bash确实会将双引号识别为引用字符,所以您可以这样做,但它们是“软引用”,因此您可能会遇到一些麻烦。就XPath而言,两种报价类型完全相同。

+0

OMG,那太简单了,我感到尴尬!我实际上是在Linux上进行bash,但是这确实有用。我一定是睡着了或者睡着了...... –

+0

@TeresaeJunior:有时你只需要一双清新的眼睛。语法突出显示也可以提供帮助。 – npostavs

+0

啊,是的。不过,我直接在终端上工作。谢谢! –