XPath выберите узел с периодами - PullRequest
6 голосов
/ 10 августа 2010

У меня есть XML-документ, в котором некоторые узлы имеют . в названии:

<com.site.blah>
   <id>asdkjasd</id>
   <com.site.testing>
       <name>test</name>
    </com.site.testing>
</com.site.blah>

Если я попытаюсь @doc.search("/*/id").first.xpath, он вернет /com.site.blah/id, но если я тогда сделаю:@doc.search("/com.site.blah/id").first.inspect возвращает nil.

Я хочу иметь возможность сделать запрос XPath, чтобы выбрать имя в com.site.testing, но он продолжает отклонять мои запросы.

Есть идеи?

(я использую hpricot, если это имеет значение)

1 Ответ

4 голосов
/ 04 июля 2013

Ваша библиотека XPath не работает. Тест имени XPath - это QName (http://www.w3.org/TR/xpath/#NT-NameTest),, который после прохождения кроличьей норы в EBNF включает точки (http://www.w3.org/TR/REC-xml/#NT-NameChar). Сообщить об ошибке разработчикам.

В качестве обходного пути ни один из механизмов escape, упомянутых в комментариях, не является частью XPath, но вы можете попробовать использовать предикат для проверки имени элемента, например:

/*[name(.) = 'com.site.blah']/id
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...