Вопрос

У меня есть документ 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
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top