Как использовать concat() в выражении Xpath Nokogiri? Я пробовал:Nokogiri и concat()
xml.xpath("concat(/root/a/text(), /root/b/text())")
Но это терпит неудачу с:
ArgumentError: node_set must be a Nokogiri::XML::NodeSet
На самом деле это, кажется, как Nokogiri принимает только XPATH выражения, которые начинаются с "" или «/», так что я попробовал эти:
xml.xpath(".concat(/root/a/text(), /root/b/text())")
xml.xpath("/concat(/root/a/text(), /root/b/text())")
xml.xpath("/concat('foo', 'bar')")
Но все они терпят неудачу с этой ошибкой:
Nokogiri::XML::XPath::SyntaxError: Invalid expression: /concat('foo', 'bar')
Я знаю Nokogiri основан на libxml2 и как таковой он реализует только XPath 1.0. Но concat() является частью XPath 1.0. Тем не менее, подобная функция в XPath 2.0 строка присоединиться(), и я дал ему шанс:
xml.xpath("string-join('foo', 'bar')")
Сообщение об ошибке:
RuntimeError: xmlXPathCompOpEval: function string-join not found
Видите, это другое сообщение об ошибке, чем для CONCAT(). Таким образом, по крайней мере, функция concat() найдена. Еще один намек, что она может работать как-то ...
xml.xpath("concat()")
... возвращает ожидаемое сообщение об ошибке:
Nokogiri::XML::XPath::SyntaxError: Invalid number of arguments: concat()
Любой шанс получить CONCAT() работает с аргументами?
P.S .: Основные выражения xpath, такие как xml.xpath("/root/a/text()")
работают нормально.
Можете ли вы представить полный пример своей проблемы? XPath с 'concat' работает хорошо для меня, я подозреваю, что вы используете результат где-нибудь, где Nokogiri ожидает чего-то еще. – matt