HtmlAgilityPack выпускает отсутствующие закрывающие теги в OuterHtml

c# html html-agility-pack

Вопрос

Я использую HtmlAgilityPack для анализа и управления текстом html. Однако, похоже, DocumentNode.OuterHtml дает отсутствующие закрывающие теги.

Чтобы изолировать проблему, теперь я ничего не делаю, просто разбираю и получаю OuterHtml (без манипуляций):

var document = new HtmlDocument();
document.LoadHtml(myHtml);
result = document.DocumentNode.OuterHtml;

Оригинал: (myHtml)

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="X-UA-Compatible" content="IE=Edge" /><title>
     MyTitle
</title>

OutputHtml: (result) Обратите внимание, что мета-элемент не закрыт

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="X-UA-Compatible" content="IE=Edge"><title>
    MyTitle
</title>

Аналогично, все входные и img-элементы открыты. (Пожалуйста, не отвечайте, что это не должно быть проблемой. Ну, этого не должно быть, но это так.) Chrome не может отобразить страницу правильно. Продолжай читать.

Что более странно:

Оригинал: (myHtml)

    <option value="10">Afrikaans</option>
    <option value="11">Albanian</option>
    <option value="12">Arabic</option>
    <option value="13">Armenian</option>
    <option value="14">Azerbaijani</option>
    <option value="15">Basque</option>

OutputHtml: (result) Обратите внимание, что отсутствуют теги, которые закрываются полностью закрытыми тегами

    <option value="10">Afrikaans
    <option value="11">Albanian
    <option value="12">Arabic
    <option value="13">Armenian

Использование последнего пакета NuGet HtmlAgilitPack: id = "HtmlAgilityPack" version = "1.4.9"

Принятый ответ

Существует несколько параметров, которые вы можете установить при загрузке документа.

OptionAutoCloseOnEnd

Определяет, нужно ли закрывать закрытые узлы в конце или непосредственно в документе. Установка этого значения в true может фактически изменить способ отображения страницы браузерами.

document = new HtmlDocument();
document.OptionAutoCloseOnEnd = true;
document.LoadHtml(content);

Связанные источники стоит прочитать:

HtmlAgilityPack Drops Option End Tags

Тег изображения не закрывается с помощью HTMLAgilityPack



Related

Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow