Perder el signo 'menor que' en HtmlAgilityPack loadhtml

c# html html-agility-pack

Pregunta

Recientemente comencé a experimentar con el HtmlAgilityPack. No estoy familiarizado con todas sus opciones y creo que estoy haciendo algo mal.

Tengo una cadena con el siguiente contenido:

string s = "<span style=\"color: #0000FF;\"><</span>";

Usted ve que en mi lapso tengo un signo de "menos que". Procesé esta cadena con el siguiente código:

HtmlDocument htmlDocument = new HtmlDocument();
htmlDocument.LoadHtml(s);

Pero cuando hago una mirada rápida y sucia en el lapso de esta manera:

htmlDocument.DocumentNode.ChildNodes[0].InnerHtml

Veo que el lapso está vacío.

¿Qué opción necesito configurar para mantener el signo 'menor que'? Ya probé esto:

htmlDocument.OptionAutoCloseOnEnd = false;
htmlDocument.OptionCheckSyntax = false;
htmlDocument.OptionFixNestedTags = false;

pero sin éxito

Sé que no es válido HTML. Estoy usando esto para corregir HTML no válido y usar HTMLEncode en los signos "menos que"

Por favor dirígeme en la dirección correcta. Gracias por adelantado

Respuesta aceptada

Los Html Agility Packs detectan esto como un error y crean una instancia de HtmlParseError para ello. Puede leer todos los errores utilizando los ParseErrors de la clase HtmlDocument. Por lo tanto, si ejecuta este código:

    string s = "<span style=\"color: #0000FF;\"><</span>";
    HtmlDocument doc = new HtmlDocument();
    doc.LoadHtml(s);
    doc.Save(Console.Out);

    Console.WriteLine();
    Console.WriteLine();

    foreach (HtmlParseError err in doc.ParseErrors)
    {
        Console.WriteLine("Error");
        Console.WriteLine(" code=" + err.Code);
        Console.WriteLine(" reason=" + err.Reason);
        Console.WriteLine(" text=" + err.SourceText);
        Console.WriteLine(" line=" + err.Line);
        Console.WriteLine(" pos=" + err.StreamPosition);
        Console.WriteLine(" col=" + err.LinePosition);
    }

Mostrará esto (el texto corregido primero y luego los detalles sobre el error):

<span style="color: #0000FF;"></span>

Error
 code=EndTagNotRequired
 reason=End tag </> is not required
 text=<
 line=1
 pos=30
 col=31

Por lo tanto, puede intentar corregir este error, ya que tiene toda la información requerida (incluida la posición de línea, columna y flujo), pero el proceso general de corregir (no detectar) errores en HTML es muy complejo.


Respuesta popular

Como mencioné en otra respuesta, la mejor solución que encontré fue preparar el código HTML para convertir los < símbolos huérfanos a su valor codificado en HTML &lt; .

return Regex.Replace(html, "<(?![^<]+>)", "&lt;");


Related

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é