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:

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

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

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

Veo que el lapso está vacío.

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

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

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):

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

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;");



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é