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)

¿Fue útil?

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
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top