2010-08-09 8 views
5

tengo un documento XML donde algunos de los nodos tienen una . en su nombre:XPath de selección de nodo con períodos

<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 a continuación, hacer: @doc.search("/com.site.blah/id").first.inspect vuelve nil.

Quiero poder hacer una consulta XPath para seleccionar el nombre en com.site.testing, pero sigue rechazando mis consultas.

¿Alguna idea?

(estoy usando hpricot si se hace una diferencia)

+1

Ha intentado escapar de esos puntos en una consulta? –

+0

@Nikita - Sí, he intentado 'com \ .site \ .blah' y eso no funciona –

+0

¿Por qué no intentó' com.site.blah'? (http://codepad.org/ecVVUPCu) – Tomalak

Respuesta

2

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 de conejo de EBNF, incluye períodos (http://www.w3.org/TR/REC-xml/#NT-NameChar). Informe el 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 
Cuestiones relacionadas