有没有办法在Nokogiri css中转义非字母数字字符?

有没有办法在Nokogiri css中转义非字母数字字符?,css,ruby,nokogiri,Css,Ruby,Nokogiri,我有一个锚标签: file.html#stuff-morestuff-CHP-1-SECT-2.1 正在尝试提取Nokogiri中的引用内容: documentFragment.at_css('#stuff-morestuff-CHP-1-SECT-2.1') 失败,错误为: unexpected '.1' after '[#<Nokogiri::CSS: :Node:0x007fd1a7df9b40 @type=:CONDITIONAL_SELECTOR, @value=[#<

我有一个锚标签:

file.html#stuff-morestuff-CHP-1-SECT-2.1
正在尝试提取Nokogiri中的引用内容:

documentFragment.at_css('#stuff-morestuff-CHP-1-SECT-2.1')
失败,错误为:

unexpected '.1' after '[#<Nokogiri::CSS:
:Node:0x007fd1a7df9b40 @type=:CONDITIONAL_SELECTOR, @value=[#<Nokogiri::CSS::Node:0x007fd1a7df9b90 @type=:ELEMENT_NAME, @value=["*"]>, #<Nokogiri::CSS::Node:0x007fd1a7df9cd0 @
type=:ID, @value=["#unixnut4-CHP-1-SECT-2"
]>]>]' (Nokogiri::CSS::SyntaxError)
“[#]”之后的“
意外的“.1”(Nokogiri::CSS::SyntaxError)
我想Nokogiri是在抱怨selectorId中的
.1
,因为
在html id中无效


我不拥有这些内容,所以如果可以避免的话,我真的不想检查并修复所有的坏ID。在nokogiri
.css()
调用中,有没有办法转义非字母数字选择器?

假设您的HTML看起来像这样:

<div id='stuff-morestuff-CHP-1-SECT-2.1'>foo</div>
不幸的是,这在Nokogiri中似乎不起作用,CSS到XPath的转换中可能有一个bug。(它在浏览器中工作)

您只需直接检查
id
属性即可解决此问题:

documentFragment.at_css('*[id=“stuff-morestuff-CHP-1-SECT-2.1”]”)
即使斜杠转义有效,如果它的值以数字开头,您可能也必须像这样检查
id
属性,这在HTML中是有效的,但即使使用转义,也不能(据我所知)表示为CSS选择器

您还可以使用XPath,它有一个

documentFragment.xpath(“id('stuff-morestuff-CHP-1-SECT-2.1'))

太好了,谢谢。我没有意识到在ID和选择器上有不同的规则。