HTML 유효성 검사를 위해 Html Agility Pack을 사용하는 방법

c# html-agility-pack

문제

나는 html의 유효성을 검사하기 위해 HTML Agility Pack을 사용하고있다. 아래는 제가 사용하고있는 것입니다.

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;
}

내 의견은 아래와 같습니다.

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;
}

그래서 내 현재 함수는 다음과 같은 오류 목록을 반환합니다

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;
}

괜찮아요 ...

내 문제는이 html이 나중에 미리보기 용으로 사용 가능할 것이므로 .html 파일로 다운로드 할 수 있기 때문에 전체 HTML이 올바른 <head><body> 태그와 함께 유효하도록하는 것입니다.

그래서 HTML Agility Pack을 사용하여 이것을 확인할 수 있는지 궁금합니다.

모든 아이디어 또는 다른 옵션을 주시면 감사하겠습니다. 감사

수락 된 답변

다음과 같이 HTML 요소 아래에 HEAD 요소 또는 BODY 요소가 있는지 확인할 수 있습니다.

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

HTML 엘리먼트가 없거나 HTML 엘리먼트 아래에 BODY 엘리먼트가 없다면 실패 할 것이다.

참고 머리글이 HTML 요소 바로 아래에 있지 않더라도 결과를 제공하기 때문에이 종류의 XPATH 표현식 "//head" 사용하지 않습니다.




아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.