2012-04-02 68 views
0

我想在bash中解析XML,xpath可以做到這一點。在bash中,如何轉義「{}」?

(要獲得子元素 「說明」 元素 「EM:MINVERSION = 2.1」)這樣的查詢工作良好:

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在所有...

回答

6

嘗試

xpath install.rdf '/RDF/Description/em:targetApplication/Description[em:id="{ec8030f7-c20a-464f-9b0e-13a3a9e97384}"]' 

這實際上並不有什麼用Perl,比其他的事實是,xpath工具寫在裏面。這全是關於bashXPath

爲防止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的確實數字比較。但這不適用於任意字符串。