Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Программирование Новый топик    Ответить
 Обрезать HTML  [new]
Maksimka-27
Member

Откуда:
Сообщений: 16
Не нашел, куда лучше, поместил сюда ...

Задача. Есть строка в формате html, например

<h2>Вот заголовочек<small>и маленькое дополнение<small></h2>
<p>Какой-то параграф</p>
<ul><li><b>1 строка<b> списка</li>
<li>2 строка списка</li></ul>
<p>И еще какой-то параграф</p>


Нужно получить текст определенной длины (например 70 знаков - заканчивается на "1 строка спи"), при этом закрыть грамотно все теги.

Как можно реализовать? (желательно c#)
29 июн 20, 05:09    [22158757]     Ответить | Цитировать Сообщить модератору
 Re: Обрезать HTML  [new]
crutchmaster
Member

Откуда: оттуда.
Сообщений: 1346
Maksimka-27,

ЯННП
29 июн 20, 05:20    [22158760]     Ответить | Цитировать Сообщить модератору
 Re: Обрезать HTML  [new]
x1ca4064
Member

Откуда:
Сообщений: 1128
Maksimka-27


Нужно получить текст определенной длины (например 70 знаков - заканчивается на "1 строка спи"), при этом закрыть грамотно все теги.

Как можно реализовать? (желательно c#)


Вы привели пример входных данных, но не привели пример результата. Общий принцип прост: парсите входной html, получаете дерево тегов, начинаете его обходить, для каждого тега получаете его текст (в Вашем понимании), пока сумма длин текстов тегов не превысит заданную.
Что значит закрыть все теги, я не понял.

Вопрос выглядит, как попытка решить какую-то задачу, о которой Вы ничего не сообщаете.
29 июн 20, 06:06    [22158763]     Ответить | Цитировать Сообщить модератору
 Re: Обрезать HTML  [new]
Maksimka-27
Member

Откуда:
Сообщений: 16
Вы привели пример входных данных, но не привели пример результата. [/quot]

<h2>Вот заголовочек<small>и маленькое дополнение<small></h2>
<p>Какой-то параграф</p>
<ul><li><b>1 строка<b> спи
<!-- длина текста без тегов выше - 70 знаков. Далее - дописанные программно теги -->
</li></ul>


Как посчитать, где резать эти 70 символов
Как понять, какие теги закрывать.

Вроде бы однозначный вопрос
29 июн 20, 08:12    [22158797]     Ответить | Цитировать Сообщить модератору
 Re: Обрезать HTML  [new]
x1ca4064
Member

Откуда:
Сообщений: 1128
Maksimka-27


Вроде бы однозначный вопрос


Лично для меня - нет. Т.к. не ясно, что вывод должен быть в html, например.

По сути:

Рассмотрите немного другую задачу: по дереву тегов воссоздать html. Для этого придется сделать рекурсивную процедуру обхода дерева, которая будет выдавать результирующий html, добавьте в нее текущую длину выведенного текста, если для данного узла длина текста+переданная длина превысила требуемую, выводите только кусок текста и начинайте возврат по рекурсии, что закроет теги.
29 июн 20, 08:57    [22158817]     Ответить | Цитировать Сообщить модератору
 Re: Обрезать HTML  [new]
Basil A. Sidorov
Member

Откуда:
Сообщений: 10270
x1ca4064
что закроет теги.
... и добавит текста.
29 июн 20, 09:13    [22158820]     Ответить | Цитировать Сообщить модератору
 Re: Обрезать HTML  [new]
x1ca4064
Member

Откуда:
Сообщений: 1128
Basil A. Sidorov
x1ca4064
что закроет теги.
... и добавит текста.
Это во власти пишущего :)

Сообщение было отредактировано: 29 июн 20, 09:16
29 июн 20, 09:18    [22158822]     Ответить | Цитировать Сообщить модератору
 Re: Обрезать HTML  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 50370
Maksimka-27
Как посчитать, где резать эти 70 символов

На пальцах... пальцев не хватит. Значит придётся заводить счётчик символов целого типа.

Maksimka-27
Как понять, какие теги закрывать.

Посчитав парность каждого из встреченных перед достижением счётчиком из предыдущего параграфа заданного значения.
29 июн 20, 13:59    [22159053]     Ответить | Цитировать Сообщить модератору
 Re: Обрезать HTML  [new]
x1ca4064
Member

Откуда:
Сообщений: 1128
Dimitry Sibiryakov

Посчитав парность каждого из встреченных перед достижением счётчиком из предыдущего параграфа заданного значения.


Думаю, это подойдет к Xml, но не к html.
29 июн 20, 20:38    [22159253]     Ответить | Цитировать Сообщить модератору
 Re: Обрезать HTML  [new]
DarkMaster
Member

Откуда: Donetsk,Ukraine
Сообщений: 6314
x1ca4064
Dimitry Sibiryakov

Посчитав парность каждого из встреченных перед достижением счётчиком из предыдущего параграфа заданного значения.


Думаю, это подойдет к Xml, но не к html.


В html все теги (почти - есть hr, br) должны быть открыты/закрыты. Поэтому вполне реально.
30 июн 20, 05:39    [22159377]     Ответить | Цитировать Сообщить модератору
 Re: Обрезать HTML  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 50370
Хотя, конечно, есть определённый бардак с опциональным закрытием, как у <P>, например, но ТС-у можно считать только те тэги, которые обязательно требуют парности.
30 июн 20, 13:46    [22159653]     Ответить | Цитировать Сообщить модератору
 Re: Обрезать HTML  [new]
fkthat
Member

Откуда:
Сообщений: 2654
Разбираем HTML в дерево, подсчитываем длину узлов. Потом начинаем перебирать узлы "снизу вверх от последнего к первому" либо пытаясь обрезать, если это текстовый узел, либо выкидывая узел целиком, каждый раз дерево перерасчитываем. Повторяем этот процесс пока не достигнем нужной полной длины. Как-то так.
30 июн 20, 19:10    [22159928]     Ответить | Цитировать Сообщить модератору
 Re: Обрезать HTML  [new]
fkthat
Member

Откуда:
Сообщений: 2654
Dimitry Sibiryakov
Хотя, конечно, есть определённый бардак с опциональным закрытием, как у <P>, например, но ТС-у можно считать только те тэги, которые обязательно требуют парности.

Да пофиг на весь бардак с ХТМЛ - можно ведь парсить не XML-парсером, а взять тот же HTML Agility Pack и парсить им.
30 июн 20, 19:14    [22159931]     Ответить | Цитировать Сообщить модератору
 Re: Обрезать HTML  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 50370
Лично мне было бы проще написать свой собственный парсер, там всего-то будет автомат на 4-5 состояний чем разбираться с какой-то чужой библиотекой, которая почти наверняка предназначена не совсем для этого.

Сообщение было отредактировано: 1 июл 20, 14:50
1 июл 20, 14:52    [22160207]     Ответить | Цитировать Сообщить модератору
 Re: Обрезать HTML  [new]
K23
Member

Откуда:
Сообщений: 20
Maksimka-27
Не нашел, куда лучше, поместил сюда ...

Задача. Есть строка в формате html, например

<h2>Вот заголовочек<small>и маленькое дополнение<small></h2>
<p>Какой-то параграф</p>
<ul><li><b>1 строка<b> списка</li>
<li>2 строка списка</li></ul>
<p>И еще какой-то параграф</p>


Нужно получить текст определенной длины (например 70 знаков - заканчивается на "1 строка спи"), при этом закрыть грамотно все теги.

Как можно реализовать? (желательно c#)


Решение на js https://github.com/brankosekulic/trimHtml

Здесь ещё на php
https://stackoverflow.com/questions/830283/cutting-html-strings-without-breaking-html-tags
https://stackoverflow.com/questions/3810230/close-open-html-tags-in-a-string
вчера, 21:19    [22161225]     Ответить | Цитировать Сообщить модератору
 Re: Обрезать HTML  [new]
fkthat
Member

Откуда:
Сообщений: 2654
Dimitry Sibiryakov
Лично мне было бы проще написать свой собственный парсер, там всего-то будет автомат на 4-5 состояний чем разбираться с какой-то чужой библиотекой, которая почти наверняка предназначена не совсем для этого.

Собственный парсер HTML? Ну-ну, писатель... Картинка с другого сайта.
вчера, 21:24    [22161228]     Ответить | Цитировать Сообщить модератору
 Re: Обрезать HTML  [new]
K23
Member

Откуда:
Сообщений: 20
fkthat
Dimitry Sibiryakov
Лично мне было бы проще написать свой собственный парсер, там всего-то будет автомат на 4-5 состояний чем разбираться с какой-то чужой библиотекой, которая почти наверняка предназначена не совсем для этого.

Собственный парсер HTML? Ну-ну, писатель... Картинка с другого сайта.


Для этой задачи не требуется полноценный парсер, только его очень ограниченное подмножество, которое реально написать вручную.
вчера, 21:53    [22161249]     Ответить | Цитировать Сообщить модератору
 Re: Обрезать HTML  [new]
x1ca4064
Member

Откуда:
Сообщений: 1128
fkthat

Собственный парсер HTML? Ну-ну, писатель... Картинка с другого сайта.


А что такого? Всякий программист, в процессе своего становления, должен написать несколько сортировок, транслятор с кого-то языка, в наше время, парсер html/xml/json + свой формат, тетрис, вебсервер, распознавалку MNIST. Еще что-то, по вкусу.
вчера, 22:06    [22161255]     Ответить | Цитировать Сообщить модератору
 Re: Обрезать HTML  [new]
x1ca4064
Member

Откуда:
Сообщений: 1128
K23,

Раньше еще архиватор был :)
вчера, 22:08    [22161256]     Ответить | Цитировать Сообщить модератору
 Re: Обрезать HTML  [new]
fkthat
Member

Откуда:
Сообщений: 2654
x1ca4064
А что такого? Всякий программист, в процессе своего становления, должен написать несколько сортировок, транслятор с кого-то языка, в наше время, парсер html/xml/json + свой формат, тетрис, вебсервер, распознавалку MNIST. Еще что-то, по вкусу.

Только кому все это нахрен надо? Не лучше ли потратить время более продуктивно, освоив уже что-то готовое, вместо того чтобы писать свой говновелосипед?
сегодня, 01:03    [22161330]     Ответить | Цитировать Сообщить модератору
 Re: Обрезать HTML  [new]
K23
Member

Откуда:
Сообщений: 20
fkthat
x1ca4064
А что такого? Всякий программист, в процессе своего становления, должен написать несколько сортировок, транслятор с кого-то языка, в наше время, парсер html/xml/json + свой формат, тетрис, вебсервер, распознавалку MNIST. Еще что-то, по вкусу.

Только кому все это нахрен надо? Не лучше ли потратить время более продуктивно, освоив уже что-то готовое, вместо того чтобы писать свой говновелосипед?


Такие проекты полезны для обучения. Именно для получения более фундаментальных знаний, чтобы понимать как всё устроено внутри. Осваивать готовое тоже надо для практических задач, без этого никак.
сегодня, 10:01    [22161444]     Ответить | Цитировать Сообщить модератору
 Re: Обрезать HTML  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 50370
K23
Для этой задачи не требуется полноценный парсер, только его очень ограниченное подмножество

Причём подмножество, реально ограниченное поиском угловых скобок.
сегодня, 14:11    [22161616]     Ответить | Цитировать Сообщить модератору
 Re: Обрезать HTML  [new]
mayton
Member

Откуда: loopback
Сообщений: 47461
x1ca4064
fkthat

Собственный парсер HTML? Ну-ну, писатель... Картинка с другого сайта.


А что такого? Всякий программист, в процессе своего становления, должен написать несколько сортировок, транслятор с кого-то языка, в наше время, парсер html/xml/json + свой формат, тетрис, вебсервер, распознавалку MNIST. Еще что-то, по вкусу.

К чорту мелочи.

Свою DBMS на файлах! И свой язык программирования.
сегодня, 15:43    [22161707]     Ответить | Цитировать Сообщить модератору
Все форумы / Программирование Ответить