如何在Nokogiri xpath表達式中使用concat()?我已經試過: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 .:像xml.xpath("/root/a/text()")
一樣的基本xpath表達式正常工作。
你能提供一個完整的問題例子嗎?帶'concat'的XPath對我來說工作正常,我懷疑你正在使用Nokogiri期望的其他地方的結果。 – matt