Question

J'ai un document XML où certains des noeuds ont un . en leur nom:

<com.site.blah>
   <id>asdkjasd</id>
   <com.site.testing>
       <name>test</name>
    </com.site.testing>
</com.site.blah>

Si je tente @doc.search("/*/id").first.xpath, il retourne /com.site.blah/id, mais si je puis faire. @doc.search("/com.site.blah/id").first.inspect retourne nil

Je veux être en mesure de faire une requête XPath pour sélectionner le nom sous com.site.testing, mais il continue de rejeter mes requêtes.

Toutes les idées?

(J'utilise hpricot si cela fait une différence)

Était-ce utile?

La solution

Votre bibliothèque XPath est cassée. Un test de nom XPath est un QName ( http://www.w3.org/TR/ XPath / # NT-NameTest ), qui, après avoir suivi le trou de lapin de EBNF, comprend des périodes ( http://www.w3.org/TR/REC-xml/#NT-NameChar ). Signaler l'erreur aux développeurs.

Pour contourner ce problème, ni des mécanismes d'échappement mentionnés dans les commentaires font partie de XPath, mais vous pouvez essayer d'utiliser un prédicat pour vérifier le nom de l'élément, comme suit:

/*[name(.) = 'com.site.blah']/id
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top