Я хотел бы сделать простое разделение на :
строку 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.
В конце концов я решил эту проблему. Мое решение на Github
В принципе, я сделал обход предварительного порядка фрагмента Nokogiri, ища только текстовые узлы, пока не нашел свой разделитель. После того, как я нашел, я разбил текстовый узел, как и любую строку. Затем я удалил все узлы, которые впоследствии были обнаружены во время обхода порядка. Это очищает "правую сторону".
Затем я последовал за постобработкой обхода того же исходного фрагмента Nokogiri, как и выше, удалив все узлы, пока не столкнулся с текстовым узлом, содержащим мой разделитель. Это очищает "левую сторону"
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>'
doc.at('p').children[0].text
doc.at('p').children[2].text
doc.at('p').children[0].text
, doc.at('p').children[2].text
для текста
:
отсюда нет<span style="font-weight: bold">HTML</span>
?</span>
?