问题 使用Nokogiri查找包含[]的标记


我有一个像html元素:

<div id="spam[500]">

我想通过id搜索这个元素,但似乎nokogiri被[]搞糊涂了。我尝试着:

doc.css("#spam[#{eggs.id}]")

但无济于事。


8589
2017-08-05 21:09


起源



答案:


克里斯,尝试这个,让我知道它是否有效:

doc = Nokogiri::HTML(page)
el = doc.xpath("//div[@id='spam[500]']").first

问题是您无法通过CSS访问它(即使在浏览器中)。尝试为“spam [500]”设置一些CSS属性,但不会应用它们。但是,您可以通过xpath访问,如上所示。


14
2017-08-06 01:01



它确实有效。谢谢。 - Christopher Foy


答案:


克里斯,尝试这个,让我知道它是否有效:

doc = Nokogiri::HTML(page)
el = doc.xpath("//div[@id='spam[500]']").first

问题是您无法通过CSS访问它(即使在浏览器中)。尝试为“spam [500]”设置一些CSS属性,但不会应用它们。但是,您可以通过xpath访问,如上所示。


14
2017-08-06 01:01



它确实有效。谢谢。 - Christopher Foy


这里真正的问题是字符[和]在HTML4(或XML)id属性中是非法的 - 请看下面的内容:

http://www.w3.org/TR/html401/types.html#type-name

(有关id属性的规范性定义,请参阅www.w3.org//TR/html401/struct/global.html#adef-id)


1
2017-12-09 07:37





你也可以这样做

el = doc.xpath("id(spam[500])").first

对于具有id的元素,您可以通过id直接调用它们,因为它始终是唯一的。

要找到xpaths,请在firefox中添加一个'xpath checker'插件。它帮助很多,非常容易


1
2017-12-28 12:43