MySQL列(product_path
)的值爲//*[(@id=\"scroller\")]/li/*/a
。使用它與Nokogiri投擲Nokogiri::XML::XPath::SyntaxError: Invalid expression:
什麼是錯的。如何在MySQL中存儲Nokogiri xpath
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
額外的反斜槓似乎造成了問題。我如何擺脫它們?
'puts''product_path'查看它是什麼,'inspect'會跳過嵌入的引號和反斜槓,只是混淆了你。在您將它放入數據庫之前,'product_path'看起來像什麼?它從何而來?爲什麼在不使用插值並嵌入雙引號的字符串周圍使用雙引號? –
'product_path'由我手動輸入。 – Bala
但它是如何進入的?你輸入時看起來像什麼? –