powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Обрезать HTML
35 сообщений из 35, показаны все 2 страниц
Обрезать HTML
    #39974020
Maksimka-27
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не нашел, куда лучше, поместил сюда ...

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

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



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

Как можно реализовать? (желательно c#)
...
Рейтинг: 0 / 0
Обрезать HTML
    #39974023
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Maksimka-27,

ЯННП
...
Рейтинг: 0 / 0
Обрезать HTML
    #39974026
x1ca4064
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Maksimka-27


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

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


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

Вопрос выглядит, как попытка решить какую-то задачу, о которой Вы ничего не сообщаете.
...
Рейтинг: 0 / 0
Обрезать HTML
    #39974046
Maksimka-27
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вы привели пример входных данных, но не привели пример результата. [/quot]

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



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

Вроде бы однозначный вопрос
...
Рейтинг: 0 / 0
Обрезать HTML
    #39974057
x1ca4064
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Maksimka-27


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


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

По сути:

Рассмотрите немного другую задачу: по дереву тегов воссоздать html. Для этого придется сделать рекурсивную процедуру обхода дерева, которая будет выдавать результирующий html, добавьте в нее текущую длину выведенного текста, если для данного узла длина текста+переданная длина превысила требуемую, выводите только кусок текста и начинайте возврат по рекурсии, что закроет теги.
...
Рейтинг: 0 / 0
Обрезать HTML
    #39974060
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
x1ca4064
что закроет теги.
... и добавит текста.
...
Рейтинг: 0 / 0
Обрезать HTML
    #39974062
x1ca4064
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. Sidorov
x1ca4064
что закроет теги.
... и добавит текста.
Это во власти пишущего :)
...
Рейтинг: 0 / 0
Обрезать HTML
    #39974172
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Maksimka-27
Как посчитать, где резать эти 70 символов

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

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

Посчитав парность каждого из встреченных перед достижением счётчиком из предыдущего параграфа заданного значения.
...
Рейтинг: 0 / 0
Обрезать HTML
    #39974277
x1ca4064
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov

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


Думаю, это подойдет к Xml, но не к html.
...
Рейтинг: 0 / 0
Обрезать HTML
    #39974365
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
x1ca4064
Dimitry Sibiryakov

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


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


В html все теги (почти - есть hr, br) должны быть открыты/закрыты. Поэтому вполне реально.
...
Рейтинг: 0 / 0
Обрезать HTML
    #39974560
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хотя, конечно, есть определённый бардак с опциональным закрытием, как у <P>, например, но ТС-у можно считать только те тэги, которые обязательно требуют парности.
...
Рейтинг: 0 / 0
Обрезать HTML
    #39974757
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Разбираем HTML в дерево, подсчитываем длину узлов. Потом начинаем перебирать узлы "снизу вверх от последнего к первому" либо пытаясь обрезать, если это текстовый узел, либо выкидывая узел целиком, каждый раз дерево перерасчитываем. Повторяем этот процесс пока не достигнем нужной полной длины. Как-то так.
...
Рейтинг: 0 / 0
Обрезать HTML
    #39974759
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
Хотя, конечно, есть определённый бардак с опциональным закрытием, как у <P>, например, но ТС-у можно считать только те тэги, которые обязательно требуют парности.

Да пофиг на весь бардак с ХТМЛ - можно ведь парсить не XML-парсером, а взять тот же HTML Agility Pack и парсить им.
...
Рейтинг: 0 / 0
Обрезать HTML
    #39974919
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Лично мне было бы проще написать свой собственный парсер, там всего-то будет автомат на 4-5 состояний чем разбираться с какой-то чужой библиотекой, которая почти наверняка предназначена не совсем для этого.
...
Рейтинг: 0 / 0
Обрезать HTML
    #39975668
K23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
K23
Гость
Maksimka-27
Не нашел, куда лучше, поместил сюда ...

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

Код: html
1.
2.
3.
4.
5.
<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
...
Рейтинг: 0 / 0
Обрезать HTML
    #39975670
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
Лично мне было бы проще написать свой собственный парсер, там всего-то будет автомат на 4-5 состояний чем разбираться с какой-то чужой библиотекой, которая почти наверняка предназначена не совсем для этого.

Собственный парсер HTML? Ну-ну, писатель...
...
Рейтинг: 0 / 0
Обрезать HTML
    #39975680
K23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
K23
Гость
fkthat
Dimitry Sibiryakov
Лично мне было бы проще написать свой собственный парсер, там всего-то будет автомат на 4-5 состояний чем разбираться с какой-то чужой библиотекой, которая почти наверняка предназначена не совсем для этого.

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


Для этой задачи не требуется полноценный парсер, только его очень ограниченное подмножество, которое реально написать вручную.
...
Рейтинг: 0 / 0
Обрезать HTML
    #39975683
x1ca4064
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthat

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


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

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

Только кому все это нахрен надо? Не лучше ли потратить время более продуктивно, освоив уже что-то готовое, вместо того чтобы писать свой говновелосипед?
...
Рейтинг: 0 / 0
Обрезать HTML
    #39975806
K23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
K23
Гость
fkthat
x1ca4064
А что такого? Всякий программист, в процессе своего становления, должен написать несколько сортировок, транслятор с кого-то языка, в наше время, парсер html/xml/json + свой формат, тетрис, вебсервер, распознавалку MNIST. Еще что-то, по вкусу.

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


Такие проекты полезны для обучения. Именно для получения более фундаментальных знаний, чтобы понимать как всё устроено внутри. Осваивать готовое тоже надо для практических задач, без этого никак.
...
Рейтинг: 0 / 0
Обрезать HTML
    #39975921
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
K23
Для этой задачи не требуется полноценный парсер, только его очень ограниченное подмножество

Причём подмножество, реально ограниченное поиском угловых скобок.
...
Рейтинг: 0 / 0
Обрезать HTML
    #39975966
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
x1ca4064
fkthat

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


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

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

Свою DBMS на файлах! И свой язык программирования.
...
Рейтинг: 0 / 0
Обрезать HTML
    #39976170
mini.weblab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
лучше переходить на Питон!

Python:
https://repl.it/repls/LightDisfiguredRefactoring#main.py
Код: python
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
from bs4 import BeautifulSoup

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

soup = BeautifulSoup(html_doc, 'html.parser')

text = soup.get_text();
first_seventy_chars = text[:70]
print("The first 70 characters:\n")
print(first_seventy_chars)
...
Рейтинг: 0 / 0
Обрезать HTML
    #39976191
да HTML-парсер в любом языке есть.
даже в линухе куча бинарников: html2csv, html2pdf, html2text, html2epub итд
можно посмотреть в сырцах, какую либу они юзают для парсинга
Dimitry Sibiryakov
Хотя, конечно, есть определённый бардак с опциональным закрытием, как у <P>, например, но ТС-у можно считать только те тэги, которые обязательно требуют парности.

а чё <p> можно не закрывать? браузер ругнётся.
его конечно можно правильно обработать, но это неправильно.
...
Рейтинг: 0 / 0
Обрезать HTML
    #39976196
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей Роза
а чё <p> можно не закрывать?
А самому посмотреть - вообще никак?браузер ругнётся.Ню-ню ...
...
Рейтинг: 0 / 0
Обрезать HTML
    #39976227
не закрывать тэги - плохая привычка.
...
Рейтинг: 0 / 0
Обрезать HTML
    #39976351
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей Роза
не закрывать тэги - плохая привычка.

HTML это все-таки не XML и спецификация HTML5 разрешает многие теги не закрывать (что, лично я считаю, не очень хорошо, но так уж оно есть).
...
Рейтинг: 0 / 0
Обрезать HTML
    #39976366
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthat
Алексей Роза
не закрывать тэги - плохая привычка.

HTML это все-таки не XML и спецификация HTML5 разрешает многие теги не закрывать (что, лично я считаю, не очень хорошо, но так уж оно есть).

https://css-live.ru/verstka/do-not-close-tags.html
Лучше не фантазировать, а просто соблюдать стандарты
Возможно меняя привычки
...
Рейтинг: 0 / 0
Обрезать HTML
    #39976376
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропил
просто соблюдать стандарты

Ну так и закрыть будет по стандарту и незакрыть будет по стандарту, т.ч. это уже дело вкуса. Вот то, что большинство тегов в принципе нельзя делать self-closed это часто действительно раздражает.
...
Рейтинг: 0 / 0
Обрезать HTML
    #39976397
Изопропил
https://css-live.ru/verstka/do-not-close-tags.html
Лучше не фантазировать, а просто соблюдать стандарты
Возможно меняя привычки

А ещё лучше хернёй не заниматься и просто закрывать ВСЕ закрываемые теги.
Я смотрю на это количество "если" и мне уже хочется в окно выйти. Мне предлагают всё это в голове держать. Она же у меня пустая, там просторно и много места.
А ещё предлагают в коде запоминать, где там был открытый тег, и где он в итоге примерно должен был закрыться... тут? или тут? а может тут?
А кроме того - самому браузеру, на уровне парсинга, тоже должно быть сложнее высчитывать место, в котором тег должен закрываться.
Да и HTML-парсеры, C/C++ либы - они то сумеют распарсить код БЕЗ тегов?
Какой-то дебил вылез со своими "гениальными" идеями "не закрывайте теги!", ну и что? Мы их ловим, сажаем в психушку и живём дальше.
...
Рейтинг: 0 / 0
Обрезать HTML
    #39976403
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
x1ca4064
Dimitry Sibiryakov

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


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

Технически эта война стандартов закончилась после появления HTML5. Далее дороги XML/Html5 разошлись.

Требование закрытия тегов существовало только в XHTML и этот стандарт так и не стал главным или обязательным
для браузеров. После HTML5 - был взят курс на функциональность внедяемых элементов таких как <canvas>,
<video>, <audio>, а строгий формализм не был принят во внимание как главный.

На сегодняшний день - для линейки браузеров Mozilla/IE/Chrome нет такой проблемы как незакрытый тег.
Они - тего-толератны. И верстальщики лупят незакрытые <img>, <br>, <ht> просто потому что им так быстрее.

Но вы можете делать strict-генерацию контента если у вас сайт в рамках вашего предприятия или
вам просто так удобно для его-же scrape или трансформации в другие форматы. Ну... если-бы
я делал @Generated содержание то скорее всего тоже закрывал-бы теги просто потому что это
выглядит строго да и самому как-то приятнее.
...
Рейтинг: 0 / 0
Обрезать HTML
    #39976416
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
И верстальщики лупят незакрытые <img>, <br>, <ht> просто потому что им так быстрее.

Теги, закрывать которые нельзя

Это пустые (void) элементы: area, base, br , col, embed, hr, img , input, link, meta, param, source, track, wbr.

Многие поспешат возразить: «Это же самозакрывающие(ся) теги, у них свой способ закрытия — слеш перед >!». Что ж, их ждет сюрприз: в HTML этот слеш… не значит ничего! Он не считается ошибкой, чтобы было легче переходить с XHTML, но «самозакрытыми», точнее, не требующими закрытия, их делает не слеш, а «зашитый» в алгоритм парсинга список этих пустых элементов. И «закрыть» по аналогии, скажем, <div /> нельзя — для HTML это будет открывающий тег (притом уже с ошибкой). Только для SVG- и MathML-элементов (напр. <g />) этот слеш означает честное «самозакрытие» (т.е. сокращение для <g></g>).
...
Рейтинг: 0 / 0
Обрезать HTML
    #39976455
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей Роза
Да и HTML-парсеры, C/C++ либы - они то сумеют распарсить код БЕЗ тегов?

Если это действительно HTML-, а не просто XML- парсер, то сумеет.
...
Рейтинг: 0 / 0
Обрезать HTML
    #39976457
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthat
Алексей Роза
Да и HTML-парсеры, C/C++ либы - они то сумеют распарсить код БЕЗ тегов?

Если это действительно HTML-, а не просто XML- парсер, то сумеет.

JSoup хавает.
...
Рейтинг: 0 / 0
35 сообщений из 35, показаны все 2 страниц
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Обрезать HTML
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]