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

それは大丈夫です...

私の問題は、適切な<head> <body>タグと<body>タグを使用してhtml全体を有効にしたいということです。このHTMLはあとで.htmlファイルとしてダウンロードしてプレビューできます。

だから私は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要素がない場合、これらは失敗します。

注:この種のXPATH式"//head"は、ヘッドがHTML要素の直下になくても結果を返すため、使用しません。




ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ