Comment utiliser concat() dans une expression xpath de Nokogiri? J'ai essayé:Nokogiri et concat()
xml.xpath("concat(/root/a/text(), /root/b/text())")
Mais qui ne réussit pas avec:
ArgumentError: node_set must be a Nokogiri::XML::NodeSet
En fait, il semble que Nokogiri accepte seulement des expressions XPath qui commencent par "" ou «/», alors j'ai essayé ces:
xml.xpath(".concat(/root/a/text(), /root/b/text())")
xml.xpath("/concat(/root/a/text(), /root/b/text())")
xml.xpath("/concat('foo', 'bar')")
Mais ils échouent tous avec cette erreur:
Nokogiri::XML::XPath::SyntaxError: Invalid expression: /concat('foo', 'bar')
Je sais Nokogiri est basé sur libxml2 et en tant que tel, il n'applique que XPath 1.0. Mais concat() fait partie de XPath 1.0. Cependant, une fonction similaire dans XPath 2.0 est une chaîne-join() et je lui ai donné une chance:
xml.xpath("string-join('foo', 'bar')")
Message d'erreur:
RuntimeError: xmlXPathCompOpEval: function string-join not found
Voir, il y a un message d'erreur différent de celui de concat(). Donc, au moins, la fonction concat() est trouvée. Un autre indice qu'il pourrait fonctionner est en quelque sorte ...
xml.xpath("concat()")
... renvoie le message d'erreur attendu:
Nokogiri::XML::XPath::SyntaxError: Invalid number of arguments: concat()
Toute chance d'obtenir concat() travaillant avec des arguments?
P.S .: Les expressions xpath de base comme xml.xpath("/root/a/text()")
fonctionnent très bien.
Pouvez-vous donner un exemple complet de votre problème? Le XPath avec 'concat' fonctionne bien pour moi, je suppose que vous utilisez le résultat quelque part où Nokogiri s'attend à quelque chose d'autre. – matt