Мы пытаемся перейти от довольно небольшой системы отслеживания ошибок к Redmine. Для нашей старой системы нет готового скрипта для решения миграции, поэтому мы хотим сделать это сами.Как заменить теги, определяющие узел?
Я предложил использовать Nokogiri для перемещения некоторых форматов в новый формат (Textile), однако у меня возникли проблемы.
Это из поля БД в БД нашей старой системы:
<ul>
<li>list item 1</li>
<li>list item 2</li>
</ul>
Это должно быть переведено в текстильной, и это будет выглядеть следующим образом:
* list item 1
* list item 2
Теперь, начиная с разбора используя Nokogiri, я здесь:
def self.handle_ul(page)
uls = page.css("ul")
uls.each {|ul|
lis = ul.css("li")
lis.each { |li|
li.inner_html = "*" << li.text << "\n"
}
}
end
Это работает как шарм. Тем не менее, мне нужно сделать две замены:
<li>
</li>
теги должны быть удалены из <li>
объекта, а также:
<ul>
</ul>
теги должны быть удалены из <ul>
объекта. Однако я не могу найти фактические теги в объекте, представляющем его. inner_html
вернулся только HTML между тегами Я ищу:
ul.inner_html
Результаты в:
<li>list item 1</li>
<li>list item 2</li>
Где я могу найти теги мне нужно заменить? Я думал об использовании parent
и перезаписывал дочерние теги <li>
с parent.parent
, но это заказывало бы их в конце бабушки и дедушки.
Могу ли я каким-либо образом получить доступ ко всему HTML-представлению объекта, не удаляя его определяющие теги, чтобы я мог их заменить?
EDIT:
В соответствии с просьбой, вот макет старой записи БД и стиль он должен иметь в текстильной.
Перед преобразованием:
Fixed for rev. 1.7.92.
<h4>Problems:</h4>
<ul>
<li>fixed.</li>
<li>fixed. New minimum 270x270</li>
<li>fixed.</li>
<li>fixed.</li>
<li>fixed.</li>
<li>fixed. Column types list is growing horizontally now.</li>
</ul>
После трансформации:
Fixed for rev. 1.7.92.
h4.Problems:
* fixed.
* fixed. New minimum 270x270
* fixed.
* fixed.
* fixed.
* fixed. Column types list is growing horizontally now.
EDIT 2:
Я пытался переписать части из to_s
метода элементов Nokogiri:
li.to_s["<li>"]=""
, но это, похоже, не является допустимым значением lvalue (не то, что есть ошибка, он просто ничего не делает).
Зачем нужна замена тега *, скорее, вы можете напрямую извлечь текст, верно? Я ничего не понял? –
Мне нужно сохранить документ в целом, только меняя определенные структуры тегов. Если бы я извлек текст, мне нужно было бы знать, где он находится в целевом документе, информация, которая будет потеряна. – 0xCAFEBABE
, поэтому вы хотите реструктурировать существующий документ с удалением тегов 'li' и' ul'. Можете ли вы показать нам вывод более явным образом? после замены того, что будет в результате html? –