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)

Foi útil?

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
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top