Comment utiliser HTML Agility Pack pour les validations HTML

c# html-agility-pack

Question

J'utilise HTML Agility Pack pour valider mon code HTML. Ci-dessous, ce que j'utilise,

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

Donc, disons que mon entrée ressemble à celle ci-dessous:

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

Donc, ma fonction actuelle renvoie une liste des erreurs suivantes

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

ce qui va bien ...

Mon problème est que je veux que l'intégralité du code HTML soit valide, c'est-à-dire avec les balises <head> et <body> appropriées, car ce code HTML sera disponible ultérieurement pour un aperçu, à télécharger en tant que fichier.

Je me demandais donc si je pouvais vérifier cela avec HTML Agility Pack?

Toutes les idées ou autres options seront appréciées. Merci

Réponse acceptée

Vous pouvez vérifier s'il y a un élément HEAD ou un élément BODY sous un élément HTML comme celui-ci, par exemple:

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

Ceux-ci échoueraient s'il n'y avait pas d'élément HTML ou s'il n'y avait pas d'élément BODY sous l'élément HTML.

Notez que je n'utilise pas ce type d'expression XPATH "//head" car cela donnerait un résultat même si la tête n'était pas directement sous l'élément HTML.



Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi