XPath Selecione o nó com períodos
Pergunta
Eu tenho um documento XML onde alguns dos nós têm um .
em seu nome:
<com.site.blah>
<id>asdkjasd</id>
<com.site.testing>
<name>test</name>
</com.site.testing>
</com.site.blah>
Se eu tentar @doc.search("/*/id").first.xpath
, ele retorna /com.site.blah/id
, mas se eu fizer: @doc.search("/com.site.blah/id").first.inspect
ele retorna nil
.
Eu quero poder fazer uma consulta XPath para selecionar o nome em com.site.testing
, mas continua rejeitando minhas perguntas.
Alguma ideia?
(Estou usando o HPRICOT se fizer a diferença)
Solução
Sua biblioteca XPath está quebrada. Um teste de nome XPath é um qname (http://www.w3.org/tr/xpath/#nt-nametest), que, depois de seguir a toca do coelho do eBNF, inclui períodos (http://www.w3.org/tr/rec-xml/#nt-nameChar). Relate o erro aos desenvolvedores.
Como solução alternativa, nenhum dos mecanismos de fuga mencionados nos comentários faz parte do XPath, mas você pode tentar usar um predicado para verificar o nome do elemento, como assim:
/*[name(.) = 'com.site.blah']/id