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

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

<div id="spam[500]">

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

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

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


person Christopher Foy    schedule 05.08.2009    source источник


Ответы (3)


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

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

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

person Mike Trpcic    schedule 06.08.2009

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

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

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

person Tim Diggins    schedule 09.12.2009

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

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

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

чтобы узнать xpaths, добавьте плагин «xpath checker» в firefox. Очень помогает и очень легко

person Devaroop    schedule 28.12.2011