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)

È stato utile?

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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top