Nokogiri xpath式でconcat()を使用するにはどうすればよいですか?私が試した:Nokogiriとconcat()
xml.xpath("concat(/root/a/text(), /root/b/text())")
しかし、それはで失敗します。
ArgumentError: node_set must be a Nokogiri::XML::NodeSet
鋸山で始まるだけ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')
私は鋸山は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()は見つかっています。
Nokogiri::XML::XPath::SyntaxError: Invalid number of arguments: concat()
(連結を取得するために、任意のチャンス)の引数での作業:それは何とかうまくいくかもしれないことをもう一つのヒントは
xml.xpath("concat()")
...予想されるエラーメッセージを返す...ですか?
P.S .: xml.xpath("/root/a/text()")
のような基本的なxpath式が正常に動作します。
問題の完全な例を教えてください。 'concat'のXPathは大丈夫ですが、Nokogiriが何か他のことを期待しているところで結果を使用していると思われます。 – matt