2013-12-18 4 views
0

Я хотел бы сделать простой раздел на : строки HTML, сохраняя при этом базовое HTML-форматирование.Обработка строк вывода html при сохранении тегов

Пусть я данные структурированы таким образом, оказываются в HTML:

данных для колонки: данные для колонкового б

Но основной HTML может быть

<p>Data for <span style="font-weight: bold">column a: data</span> for column b</p> 

И мой выход предпочтительно будет

cola = '<p>Data for <span style="font-weight: bold">column a</span></p>' 
colb = '<p><span style="font-weight: bold">data</span> for column b</p>' 

или более сложные примеры.

Я использую Ruby & Nokogiri.

+0

Не получите ваши потребности .. вы можете уточнить более конкретно? Где ':' ушел отсюда ' HTML'? –

+1

Ваш пример не имеет смысла. Почему вы даже заботитесь о разделении на двоеточие, когда все, что вы делаете, это добавить запятую после закрытия тега ''? – cpjolicoeur

+0

Я обновил текст на примере, который показывает больше, чего я пытаюсь выполнить. –

ответ

0
doc = Nokogiri::HTML::fragment '<p>Data for <span style="font-weight: bold">column a: data</span> for column b</p>' 

a, b = doc.css('span').text.split ':' 

cola = '<p>Data for <span style="font-weight: bold">' + a + '</span></p>' 
colb = '<p><span style="font-weight: bold">' + b + '</span> for column b</p>' 
+0

Спасибо, но это работает только для примера, а не для общего случая. –

+0

Используйте 'doc.at ('p'). Children [0] .text',' doc.at ('p'). Children [2] .text' для текста – NARKOZ

0

В конце концов я решил эту проблему. My solution on Github

В принципе, я сделал обход предварительного фрагмента Nokogiri, ища только текстовые узлы, пока не нашел свой разделитель. После того, как я нашел, я разбил текстовый узел, как и любую строку. Затем я удалил все узлы, которые впоследствии были обнаружены во время обхода порядка. Это очищает «правую сторону».

Затем я последовал за постобработкой того же исходного фрагмента Nokogiri, как и выше, удалив все узлы, пока не столкнулся с текстовым узлом, содержащим мой разделитель. Это очищает «левую сторону»

Смежные вопросы