Найти тег с идентификатором, включая [] с помощью Nokogiri

У меня есть элемент html, например:

<div id="spam[500]">

Я хочу найти этот элемент по id, но кажется, что nokogiri путается с помощью []. Я пытаюсь:

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

но безрезультатно.

Ответ 1

Крис, попробуйте это и сообщите мне, если это работает:

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

Проблема в том, что вы не можете получить к ней доступ через CSS (даже в браузере). Попробуйте установить некоторые атрибуты CSS для "спама [500]", и они не будут применяться. Однако вы можете получить доступ через xpath, как показано выше.

Ответ 2

Настоящая проблема заключается в том, что символы [и] являются незаконными в атрибуте id4 HTML4 (или XML) - посмотрите на следующее:

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

(для нормативного определения атрибута id смотрите www.w3.org//TR/html401/struct/global.html#adef-id)

Ответ 3

вы также можете сделать это таким образом

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

для элементов, имеющих id, вы можете вызывать их напрямую через id, потому что он всегда уникален.

для определения xpaths, добавьте плагин 'xpath checker' в firefox. Это помогает много и очень легко