XPath seleziona nodo con periodi
Domanda
Ho un documento XML in cui alcuni dei nodi hanno un .
nel loro nome:
<com.site.blah>
<id>asdkjasd</id>
<com.site.testing>
<name>test</name>
</com.site.testing>
</com.site.blah>
Se provo @doc.search("/*/id").first.xpath
, restituisce /com.site.blah/id
, ma se io poi faccio:. @doc.search("/com.site.blah/id").first.inspect
restituisce nil
Voglio essere in grado di fare una query XPath per selezionare il nome sotto com.site.testing
, ma mantiene rifiutando le mie domande.
Tutte le idee?
(sto usando hpricot se fa la differenza)
Soluzione
La libreria XPath è rotto. Un test nome XPath è un QName ( http://www.w3.org/TR/ xpath / # NT-Nametest ), che, dopo aver seguito il foro di coniglio EBNF, comprende periodi ( http://www.w3.org/TR/REC-xml/#NT-NameChar ). Segnalare l'errore agli sviluppatori.
Per risolvere il problema, nessuno dei meccanismi di fuga menzionati nei commenti fanno parte di XPath, ma si può provare a utilizzare un predicato per controllare il nome dell'elemento, in questo modo:
/*[name(.) = 'com.site.blah']/id