XPath Выберите узел с периодами
Вопрос
У меня есть документ 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, если это имеет значение)
Решение
Ваша библиотека XPath нарушена. Испытание названия XPath - это Qname (http://www.w3.org/tr/xpath/#nt-coutest.), который после последующей кролики дыры EBNF включает в себя периоды (http://www.w3.org/tr/rec-xml/#nt-mechar.). Сообщите об ошибке разработчикам.
Как обходной путь, ни одно из механизмов побега, упомянутых в комментариях, не являются частью XPath, но вы можете попробовать использовать предикат, чтобы проверить имя элемента, как так:
/*[name(.) = 'com.site.blah']/id