Как вставить узел DOM с определенным символьным индексом в существующий узел (с помощью Hpricot или аналогичной библиотеки Ruby)

Предположим, у меня есть этот HTML:

html = <div>Four score and seven years ago</div>

Как лучше всего вставить (скажем) тег привязки после слова "оценка"? Примечание: я хочу сделать это с точки зрения манипулирования DOM (например, с Hpricot), а не с точки зрения манипулирования текстом (например, без регулярных выражений)

2 ответа

require 'rubygems'
require 'nokogiri'

doc = Nokogiri::XML(DATA)
text = doc.xpath('//text()').first
text.content =~ /^(.*score)(.*)$/
text.content = $1
node = Nokogiri::XML::Node.new('a',doc)
text.add_next_sibling node
node.add_next_sibling Nokogiri::XML::Text.new($2,doc)

puts doc.to_xml

__END__
<div>Four score and seven years ago</div>

Я не так хорошо говорю на рубине. но обычно вы должны иметь: Элемент div - и TextNode "Четыре счета и семь лет назад"

Теперь, если вы хотите вставить что-то, вам нужно:

  • разделить текст из текстового узла на две части (оригинал должен измениться на "Четыре счета") с помощью функций текстового поиска / разделения
  • создать элемент
  • создать новый текстовый узел с остальным текстом
  • добавьте a-элемент к элементу div, а затем добавьте вновь созданный текстовый узел
Другие вопросы по тегам