4

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

したがって、私の入力が以下に示すようなものだとします。

<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 ファイルとしてダウンロードできるようにするためです。

HTML Agility Pack を使用してこれを確認できるかどうか疑問に思っていましたか?

アイデアやその他のオプションをいただければ幸いです。ありがとう

4

1 に答える 1

5

次の例のように、HTML 要素の下に HEAD 要素または BODY 要素があることを確認できます。

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

HTML 要素がない場合、または HTML 要素の下に BODY 要素がない場合、これらは失敗します。

"//head"ヘッドが HTML 要素の直下になくても結果が得られるため、この種の XPATH 式は使用しないことに注意してください。

于 2013-05-20T08:45:12.510 に答える