Come utilizzare Html Agility Pack per convalide HTML

c# html-agility-pack

Domanda

Sto usando HTML Agility Pack per convalidare il mio html. Di seguito è quello che sto usando,

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

Quindi, dire che il mio input è simile a quello mostrato di seguito:

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

Quindi la mia funzione attuale restituisce un elenco di errori seguenti

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

che va bene ...

Il mio problema è che voglio che l'intero html sia valido, cioè con i <head> e <body> , perché questo html sarà in seguito disponibile per l'anteprima, scaricato come file .html.

Quindi mi stavo chiedendo se potevo verificarlo utilizzando HTML Agility Pack?

Qualsiasi idea o altra opzione sarà apprezzata. Grazie

Risposta accettata

Puoi controllare che ci sia un elemento HEAD o un elemento BODY sotto un elemento HTML come questo, ad esempio:

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

Questi fallirebbero se non ci fosse un elemento HTML, o se non ci fosse alcun elemento BODY sotto l'elemento HTML.

Nota Non uso questo tipo di espressione XPATH "//head" perché darebbe un risultato anche se la testa non fosse direttamente sotto l'elemento HTML.




Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché