Манипуляции со строками вывода html при сохранении тегов

0

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

Предположим, что у меня есть данные, структурированные так, отображаемые в HTML:

Данные для столбца a: данные для столбца b

Но основным 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
    Не понимайте, что вам нужно. Можете ли вы немного конкретнее? Где : отсюда нет <span style="font-weight: bold">HTML</span> ?
  • 1
    Ваш пример не имеет смысла. Почему вам даже нужно разделить двоеточие, когда все, что вы делаете, это добавляете запятую после закрывающего </span> ?
Показать ещё 1 комментарий
Теги:
string
nokogiri

2 ответа

0

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

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

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

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 doc.at('p').children[0].text , doc.at('p').children[2].text для текста

Ещё вопросы

Сообщество Overcoder
Наверх
Меню