我一直与Nokogiri工作了几天,我绝对崇拜它。一切工作都非常出色,直到我得到了一个要求使用data-reactid javascript属性标记的网站。问题是,Nokogiri似乎与这个网站使用的属性id格式(几个时段,一些美元符号和一些其他无效的xml/css字符)混淆:Nokogiri:如何选择在其ID中包含句点的属性的值?
我需要刮的一个例子是:
<td data-reactid=".3.3.1:$contract_23.$=1$dataRow:0.1">94.280</td>
我所需要的属性的内部值(94.280),用一个id” .3.3.1:$ contract_23 $ = 1 $数据行:0.1"
通常在引入nokogiri我们将通过做类似的选择:
doc.css("type[attributename=attributeid]")
在我的例子那就是:
doc.css("td[data-reactid=.3.3.1:$contract_23.$=1$dataRow:0.1]")
但无论我做什么,以逃避无效字符,它不断地说我有我的等号后无效字符登录:
的错误信息以上代码:
nokogiri-1.4.3.1/lib/nokogiri/css/parser.rb:78:in `on_error': unexpected '.3' after 'equal'
我已经试过:
A)获取我的字符串定义为变量和强制进入一个字符串
b)用反斜杠逃逸它(0.3。[...])
c)用散列加前缀它(#.3.3 [...])
d)使用CGI escapedString
E)将其置于内部 '%{}' 例如它逃逸 '%{3.3 [...]}'
无论我做什么,我都会收到相同的信息(除了选项e之外给我一个完全不同的错误信息:
: no .<digit> floating literal anymore; put 0 before dot
你们可以帮助我得到正确的价值与这样一个奇怪的命名属性?
哇,这是快!非常感谢!我使用HTML作为解析器,并且您的方法确实有效!双引号内的单引号的魔力!这是一种享受! – Antonio 2014-10-02 00:01:24
@Antonio,不客气。请注意,如果要将某些内容插入到字符串中,则使用双引号。'planet =“地球”;放置“hello#{planet}”'因为你不需要插入任何内容到你的css选择器中,所以在外部使用单引号和在内部使用双引号会更有意义:''td [data-reactid =“。3.3.1:$ contract_23。$ = 1 $ dataRow:0.1”]''里面的双引号与html中使用的双引号具有一定的匹配对称性。 – 7stud 2014-10-02 00:18:57
@Antonio,至于'%q {}'和'%Q {''',它们不能在字符串中使用,但你可以这样做:'%q {td [data-reactid =“。3.3 .1:$ contract_23。$ = 1 $ dataRow:0.1“]}'但是如果使用单引号更清晰,那么没有理由在这里使用'%q {}'(或'%Q {}')。 – 7stud 2014-10-02 00:20:40