Есть ли какой-нибудь способ разобрать недопустимый HTML?

#c# #.net #xml

#c# #.net #xml

Вопрос:

Мне нужно проанализировать недопустимые HTML-файлы, которые содержат несколько случайных элементов (например, BODY) в случайных строках по всему файлу. Я попытался проанализировать его как XML, но безуспешно, поскольку этот файл также имеет недопустимую структуру XML (много неправильных атрибутов в случайных элементах поверх файла). HtmlAgilityPack также не смог прочитать этот файл. Это только чтение файла перед первым неправильным элементом и ничего после него.

Вот небольшой пример такого файла:

 <HTML>
<HEAD>
    <TITLE>My title</TITLE>
</HEAD>
<BODY leftmargin=9 topmargin=7 >
    <TABLE>
        <TR>
            <TD>Test</TD>
        </TR>
        <TR>
            <TD>Test</TD>
            <TD>Test<TD>
        </TR>
            <BODY> <-- This is the point where HtmlAgilityPack is stuck --!>
                <TR>
                    <TD>Test</TD>
                    <TD>Test</TD>
                </TR>
                <TR>
            </BODY>
        <TR>
        <TD><FONT>Test</FONT></TD>
        </TR>
    </TABLE>
</BODY>
  

Я пытаюсь проанализировать информацию из этой таблицы.

Комментарии:

1. Достаточно сложно разобрать допустимый HTML, отчасти из-за определения «недопустимый»!

2. если AgilityPack не может его прочитать, я думаю, что ваш фрагмент действительно в плохом состоянии. если документ находится в файловой системе, вы можете прочитать его с помощью потоков, но для его разбора учтите, что если браузер не может его отобразить, а AgilityPack не может его разобрать, либо вы оставляете его, либо создаете свой собственный анализатор, который не работает даже с таким контентом. Можете ли вы показать фрагмент такого неработающего содержимого html?

3. Зачем вам нужно разбирать? Вы пытаетесь собирать ошибки и отображать их? Вы пытаетесь исправить ошибки автоматически?

Ответ №1:

Пусть Internet Explorer сделает за вас тяжелую работу — он сделает все возможное, чтобы «восстановить» сломанную структуру тегов во что-то, что он понимает (что является технически допустимым XML с правильными парами тегов и т. Д.).

Откройте HTML в WebBrowser (или Windows.Элементы управления.WebBrowser (если вы предпочитаете библиотеки WPF), тогда вы можете пройти через DOM через свойство Document. DOM всегда будет правильным, независимо от того, насколько испорчен исходный код.

Сторонние библиотеки не требуются.

Комментарии:

1. @Kevin Ты имеешь в виду, как извлечь определенные теги из свойства документа? Ознакомьтесь с документацией для класса HTMLDocument msdn.microsoft.com/en-us/library /… , вы можете использовать такие методы, как getElementsByName, GetElementsById и т. Д., Или пройти через весь DOM, начиная со свойства Body (у него есть коллекция его дочерних элементов, у его дочерних элементов есть свои собственные дочерние элементы …). РЕДАКТИРОВАТЬ: Черт, комментарий исчез 🙂

Ответ №2:

Мы проанализировали веб-страницы с недопустимым html с помощью Html Agility Pack. Насколько я помню, это проделало довольно хорошую работу.

Ответ №3:

Вы можете использовать SgmlReader. Конечно, если ваши html-файлы очень неправильные, это вам не поможет.