powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Обрезать HTML
25 сообщений из 35, страница 1 из 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
25 сообщений из 35, страница 1 из 2
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Обрезать HTML
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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