Wie verwende ich das HTML Agility Pack für HTML-Validierungen?

c# html-agility-pack

Frage

Ich benutze HTML Agility Pack für die Validierung meines HTML. Unten ist was ich benutze,

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

Sagen Sie also, meine Eingabe ist etwas wie das Folgende:

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

Also meine aktuelle Funktion gibt eine Liste der folgenden Fehler zurück

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

was ist in Ordnung ...

Mein Problem ist, dass ich das gesamte HTML gültig sein will, das heißt mit einem richtigen <head> und <body> -Tags, weil dieses HTML später für die Vorschau verfügbar ist, als .html -Dateien herunterladen.

Also habe ich mich gefragt, ob ich das mit HTML Agility Pack überprüfen könnte?

Irgendwelche Ideen oder andere Optionen werden geschätzt. Vielen Dank

Akzeptierte Antwort

Unter einem solchen HTML-Element können Sie beispielsweise prüfen, ob sich ein HEAD-Element oder ein BODY-Element befindet:

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

Diese würden fehlschlagen, wenn es kein HTML-Element gibt oder wenn sich unter dem HTML-Element kein BODY-Element befindet.

Hinweis: Ich verwende diese Art von XPATH-Ausdruck "//head" da dies zu einem Ergebnis führen würde, selbst wenn sich der head nicht direkt unter dem HTML-Element befände.



Related

Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow