MySQL 列 ( product_path
) に値 があります//*[(@id=\"scroller\")]/li/*/a
。Nokogiri で使用すると、Nokogiri::XML::XPath::SyntaxError: Invalid expression:
Whats wrong がスローされます。
require 'mysql2'
require 'active_record'
ActiveRecord::Base.establish_connection(
:adapter => "mysql2",
:host => "localhost",
...
)
class MyTable < ActiveRecord::Base
end
@s = MyTable.first
#...Looks like backward slash is escaped automatically by mysql
@s.product_path #=> "//*[(@id=\\\"scroller\\\")]/li/*/a"
p = Nokogiri::HTML(open(@s.url))
#all variations below throw invalid expression error
p.search(@s.product_path).count
p.search("#{@s.product_path").count
p.xpath(@s.product_path).count
#But this works flawlessly.
p.search("//*[(@id=\"scroller\")]/li/*/a").count #=> works fine.
アップデート
私はこれを試してみましたが、うまくいきました。
a = '//*[(@id="scroller")]/li/*/a'
p.search(a).count
バックスラッシュを追加すると、問題が発生するようです。どうすればそれらを取り除くことができますか?