Мы пытаемся перейти от довольно маленькой системы отслеживания ошибок к Redmine. Для нашей старой системы нет готового сценария решения миграции, поэтому мы хотим сделать это сами.
Я предложил использовать Nokogiri для переноса части форматирования в новый формат (Textile), однако столкнулся с проблемами.
Это из поля БД в БД нашей старой системы:
<ul>
<li>list item 1</li>
<li>list item 2</li>
</ul>
Это нужно перевести в Textile, и это будет выглядеть так:
* 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-представлению объекта, не удаляя его определяющие теги, чтобы я мог их заменить?
РЕДАКТИРОВАТЬ:
В соответствии с просьбой, вот макет старой записи БД и стиль, который должен быть в текстиле.
До преобразования:
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.
РЕДАКТИРОВАТЬ 2:
Я попытался перезаписать части метода to_s
элементов Nokogiri:
li.to_s["<li>"]=""
но это не похоже на допустимое значение lvalue (не то, чтобы это была ошибка, оно просто ничего не делает).
li
иul
. Можете ли вы показать нам вывод более явным образом? после замены каким будет результирующий html? - person Arup Rakshit   schedule 29.05.2013</h4>
. Это намеренно? - person Arup Rakshit   schedule 29.05.2013