XPath seleccionar nodo con períodos
Pregunta
Tengo un documento XML donde algunos de los nodos tienen una .
en su nombre:
<com.site.blah>
<id>asdkjasd</id>
<com.site.testing>
<name>test</name>
</com.site.testing>
</com.site.blah>
Si intento @doc.search("/*/id").first.xpath
, devuelve /com.site.blah/id
, pero si lo hago a continuación:. @doc.search("/com.site.blah/id").first.inspect
vuelve nil
Quiero ser capaz de hacer una consulta XPath para seleccionar el nombre con el com.site.testing
, pero sigue rechazando mis consultas.
Algunas ideas?
(estoy usando hpricot si se hace una diferencia)
Solución
Su biblioteca XPath se rompe. Una prueba de nombre XPath es un QName ( http://www.w3.org/TR/ XPath / # NT-NameTest ), que, después de seguir el agujero del conejo de EBNF, incluye períodos ( http://www.w3.org/TR/REC-xml/#NT-NameChar ). Informar del error a los desarrolladores.
Como solución, ninguno de los mecanismos de escape mencionados en los comentarios son parte de XPath, pero se puede intentar usar un predicado para comprobar el nombre del elemento, así:
/*[name(.) = 'com.site.blah']/id