2012-04-02 4 views
0

Я хочу разобрать XML в bash, и xpath может это сделать.В bash, как избежать "{}"?

(Для того, чтобы получить элемент "Описание" с подэлемента "эм: 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) 

Я думаю, это потому, что фигурные скобки "{}" нужно бежать, так что я пытался '{{..}}', '{...}' ... ни один из й em работает.

Я не знаком с XPath или Perl вообще ...

ответ

6

Попробуйте

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

Это на самом деле не имеет ничего общего с Perl, кроме того факта, что утилита xpath написано в нем. Это все о 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 делает числовое сравнение. Но это не будет работать с произвольными строками.

Смежные вопросы