Cómo utilizar Html Agility Pack para validaciones HTML

c# html-agility-pack

Pregunta

Estoy usando HTML Agility Pack para validar mi html. A continuación es lo que estoy 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;
}

Así que di que mi entrada es algo como la que se muestra a continuación:

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

Así que mi función actual devuelve una lista de los siguientes errores

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

lo cual está bien...

Mi problema es que quiero que todo el código html sea válido, es decir, con las etiquetas <head> y <body> adecuadas, ya que este html estará disponible más adelante para la vista previa, y se descargará como archivos .html.

¿Entonces me preguntaba si podría verificar esto usando HTML Agility Pack?

Cualquier idea u otras opciones serán apreciadas. Gracias

Respuesta aceptada

Puede verificar que haya un elemento HEAD o un elemento BODY bajo un elemento HTML como este, por ejemplo:

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

Estos fallarían si no hay un elemento HTML, o si no hay ningún elemento BODY bajo el elemento HTML.

Tenga en cuenta que no utilizo este tipo de expresión XPATH "//head" porque daría un resultado incluso si la cabeza no estuviera directamente debajo del elemento HTML.



Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué