我想在bash中解析XML,而xpath也可以这样做。
(要获得带有子元素“em:minVersion = 2.1”的“Description”元素)这样的查询效果很好:
xpath install.rdf /RDF/Description/em:targetApplication/Description[em:minVersion=2.1]
但这不起作用:
xpath install.rdf /RDF/Description/em:targetApplication/Description[em:id={ec8030f7-c20a-464f-9b0e-13a3a9e97384}]
输出如下:
Query:
/RDF/Description/em:targetApplication/Description[em:id={{ec8030...
.......................................................^^^
Invalid query somewhere around here (I think)
我认为这是因为大括号“{}”需要转义,所以我尝试了'{{..}}','{...}'......它们都不起作用。
我根本不熟悉xpath或perl ......
答案 0 :(得分:6)
尝试
xpath install.rdf '/RDF/Description/em:targetApplication/Description[em:id="{ec8030f7-c20a-464f-9b0e-13a3a9e97384}"]'
除了写入xpath
实用程序的事实之外,这实际上与Perl没有任何关系。这完全取决于bash
和XPath。
要阻止bash
查看它,请将整个查询放在单引号中。
在XPath中,必须引用字符串(使用单引号或双引号)。在XPath表达式中使用双引号通常最简单,然后在bash
周围放置单引号。
因为您正在搜索
<em:id>{ec8030f7-c20a-464f-9b0e-13a3a9e97384}</em:id>
你想要的条件是
em:id="{ec8030f7-c20a-464f-9b0e-13a3a9e97384}"
你正在逃避em:minVersion=2.1
因为2.1看起来像一个数字,所以XPath进行了数字比较。但这不适用于任意字符串。