powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / IHTMLElement или что-то еще?!
7 сообщений из 7, страница 1 из 1
IHTMLElement или что-то еще?!
    #33933415
Dmitry .
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте!

хочу распарсить Текст в html-документе. А именно, взать по кусочкам все текстовые блоки, применить к ним преобразование, сложить обратно в HTML-элементы и вернуть отформатированный HTML-документ

Прохожу по тегам...



using System;
using mshtml;


namespace tumen.framework.content.Typo
{
    public class Typo
    {
        private string _htmlText;
        IHTMLDocument2 _htmlDoc;
        HTMLDocumentClass _htmldocClass;

        public Typo(string htmlText)
        {
            _htmlText = htmlText;

            _htmldocClass = new HTMLDocumentClass(); 
            _htmlDoc = _htmldocClass as IHTMLDocument2; 
            _htmlDoc.write(htmlText);
        }

        public string goToBody()
        {
            string result = "";

            IHTMLElementCollection elementColection = (IHTMLElementCollection)_htmlDoc.all.tags("body");
            
            if (null == elementColection)
                return result;

            if (0 == elementColection.length)
                return result;
        
            return goToElement((IHTMLElement)elementColection.item(null, 0));
        }

        protected string goToElement(IHTMLElement element)
        {
            string  result = "";
            IHTMLElementCollection children = (IHTMLElementCollection)element.children;
            
            if (children.length > 0)
            {
                foreach (IHTMLElement child in children)
                    result += "[" + " " + child.tagName +"]" + goToElement( child );
            }
            else
                result += element.outerText;
            

            return result;
        }
    }
}




тут же выясняется, что такой способ выдергивает не весь текст. Например, для документа
<p>111<b>222</b>333</b>444</p>

алгоритм найдет только 222 333

Подскажите, как можно достучаться до 111 и 444. И как после преобразования их положить на место?...

Заранее спасибо!
...
Рейтинг: 0 / 0
IHTMLElement или что-то еще?!
    #33934074
Dmitry .
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Возможно для такой задачи HTML парсить чем-то другим...
Только пожалуйста не предлагайте проходить по строкам ручкаим:)
...
Рейтинг: 0 / 0
IHTMLElement или что-то еще?!
    #33934634
Geni
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте, Dmitry ., Вы писали:

D>Возможно для такой задачи HTML парсить чем-то другим...
D>Только пожалуйста не предлагайте проходить по строкам ручкаим:)

D>
данное сообщение получено с www.gotdotnet.ru
D>ссылка на оригинальное сообщение


вырезай html-код с помощью RegExp
много примеров найдешь на regexplib.com
...
Рейтинг: 0 / 0
IHTMLElement или что-то еще?!
    #33934655
mclabman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Gotdotnet.User.State happy = Inet.Google("Html2Xml | SgmlReader");
...
Рейтинг: 0 / 0
IHTMLElement или что-то еще?!
    #33934761
Dmitry .
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вырезай html-код с помощью RegExp
много примеров найдешь на regex


Не сказал бы что это супер здорово...
Реально нужно не вырезать, а заменять


Кроме того, регулярные выражения в этом плане тупее mshtml. Стоит ли говорить про стандартные "опечатки" внутри html которые IE понимает, и тд и тп. Автоматическое закрытие открытых тегов... и прочее.

Потому хочется работать именно с распарсенной html-кой.
Есть какие-нибудь идеи ?
...
Рейтинг: 0 / 0
IHTMLElement или что-то еще?!
    #33934779
Dmitry .
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Gotdotnet.User.State happy = Inet.Google("Html2Xml | SgmlReader");

Допустим, HTML в XML мне перегонять совсем не надо


Как c помощью SgmlReader прочитать весь текст, из примера в пред. посте, преобразовать текст (это я знаю
, и затем (самое ВАЖНОЕ), засунуть его неместо ?
...
Рейтинг: 0 / 0
IHTMLElement или что-то еще?!
    #33938863
Dmitry .
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Господа, всем спасибо!
Ответ крылся в дебрях DOM:



using System;
using System.IO;
using mshtml;


namespace tumen.framework.content.Typo
{
    public class Typo
    {
        private string _htmlText;
        IHTMLDocument2 _htmlDoc;
        HTMLDocumentClass _htmldocClass;
        private TypoFormattersRegistry _formattersRegistry = new TypoFormattersRegistry();

        public Typo(string htmlText)
        {
            _htmlText = htmlText;

            _htmldocClass = new HTMLDocumentClass(); 
            _htmlDoc = _htmldocClass as IHTMLDocument2; 
            _htmlDoc.write(htmlText);
        }

        public string goToBodyNode()
        {
            IHTMLElementCollection elementColection = (IHTMLElementCollection)_htmlDoc.all.tags("body");
            
            if (null == elementColection)
                return "";

            if (0 == elementColection.length)
                return "";
        
            IHTMLDOMNode body = (IHTMLDOMNode)elementColection.item(null, 0);
            goToNode(body);
            return ((IHTMLElement)body).innerHTML.Replace("&amp;", "&").Replace("&lt;", "<").Replace("&gt;", ">");
        }

        
        protected string goToNode(IHTMLDOMNode node)
        {
            string  result = "";
            IHTMLDOMChildrenCollection children = (IHTMLDOMChildrenCollection)node.childNodes;
            
            if (children.length > 0)
            {
                foreach (IHTMLDOMNode child in children)
                    goToNode( child );
            }
            else
                node.nodeValue = _formattersRegistry.applyFormatters2(node.nodeValue.ToString());
        
            return result;
        }
    }
}
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / IHTMLElement или что-то еще?!
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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