Как использовать Html Agility Pack для проверки HTML

c# html-agility-pack

Вопрос

Я использую HTML Agility Pack для проверки моего html. Ниже я использую,

public class MarkupErrors
{
    public string ErrorCode { get; set; }
    public string ErrorReason { get; set; }
}

public static List<MarkupErrors> IsMarkupValid(string html)
{
    var document = new HtmlAgilityPack.HtmlDocument();
    document.OptionFixNestedTags = true;
    document.LoadHtml(html);

    var parserErrors = new List<MarkupErrors>();
    foreach(var error in document.ParseErrors)
    {
        parserErrors.Add(new MarkupErrors
                             {
                                 ErrorCode = error.Code.ToString(),
                                 ErrorReason = error.Reason
                             });
    }

    return parserErrors;
}

Поэтому скажите, что мой ввод - это что-то вроде приведенного ниже:

<h1>Test</h1> 
Hello World</h2> 
<h3>Missing close h3 tag

Поэтому моя текущая функция возвращает список следующих ошибок

- Start tag <h2> was not found
- End tag </h3> was not found

что прекрасно ...

Моя проблема в том, что я хочу, чтобы весь html был действительным, то есть с тегами <head> и <body> , потому что этот html позже будет доступен для предварительного просмотра, загружаемого как .html-файлы.

Поэтому мне было интересно, могу ли я проверить это с помощью пакета Agility Pack?

Любые идеи или другие варианты будут оценены. благодаря

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

Вы можете проверить, есть ли элемент HEAD или элемент BODY под элементом HTML, подобным этому, например:

bool hasHead = doc.DocumentNode.SelectSingleNode("html/head") != null;
bool hasBody = doc.DocumentNode.SelectSingleNode("html/body") != null;

Они не сработают, если не будет HTML-элемента или нет элемента BODY под элементом HTML.

Примечание. Я не использую это выражение XPATH "//head" потому что это даст результат, даже если голова не была непосредственно под элементом HTML.



Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему