AngleSharp - Обработка самозакрывающихся тегов

При разборе html-фрагмента, содержащего самозакрывающиеся теги:

var text = @"<tag /> and another <tag />";
var parser = new HtmlParser();
var originalHtml = parser.Parse(text);

Результирующий вывод OuterHtml:

<tag> and another <tag></tag></tag>

Я знаю, что angularsharp не «рендерит» самозакрывающиеся теги без специального средства форматирования, но ожидается ли такой вывод с учетом ввода?

Я бы ожидал что-то вроде:

<tag></tag> and another <tag></tag>

person pelican_george    schedule 12.09.2016    source источник


Ответы (1)


Это не имеет ничего общего с AngleSharp, а скорее со спецификацией HTML5. Самозакрытие разрешено только для нескольких элементов (и в основном только для обратной совместимости - на самом деле в правильном HTML5 вы никогда не закроете себя, а скорее будете использовать неявное самозакрытие, т. е. предпочитаете <img> вместо <img /> и <meta> вместо <meta />).

Все это написано: поскольку указанный вами тег (tag) неизвестен, он не является исключением (список исключений короток - два упомянутых выше находятся в этом списке). Если вы хотите использовать тег, аналогичный вашему пользовательскому, используйте div.

Теперь сравните результат использования

var text = @"<div /> and another <div />";

to

var text = @"<img /> and another <img />";

Вы должны увидеть, что последний (используя img) дает вам ожидаемый результат (сериализованный по-другому, но сгенерированный DOM будет эквивалентен), а div будет выглядеть как текущий вывод.

Важно помнить: HTML может показаться подмножеством XML, но на самом деле это не так. Это также не суперсет. Некоторое время назад HTML начал отклоняться, и HTML5 появился только для того, чтобы, наконец, привнести здравомыслие на сторону синтаксического анализатора, предоставив общий способ обработки любого вида неожиданной разметки.

Надеюсь это поможет!

person Florian Rappl    schedule 11.12.2017