Cómo analizar un documento html usando c #

c# html html-agility-pack html-parsing

Pregunta

Tengo que analizar un documento de la siguiente manera. Estoy probando HtmlAgilityPack pero es muy complicado. Necesito el texto interno de esta etiqueta: <td style="background: #36461f;color: #ffffff;font-weight: bold;padding: 2px;font-size: 12px;height: 25px;">Mac Bahsi</td> y niños

<div class="div1" style="width: 288px;" onclick="parent.javaScriptAddSlip('slip', '164518117;;;-;11.25;1;Maç Bahsi;164518117')">
<div class="div1" style="width: 288px;" onclick="parent.javaScriptAddSlip('slip', '164518117;;;-;6.50;0;Maç Bahsi;164518117')">,
<div class="div1" style="width: 288px;" onclick="parent.javaScriptAddSlip('slip', '164518117;;;-;1.18;2;Maç Bahsi;164518117')">

<div class="div1" style="width: 288px;" onclick="parent.javaScriptAddSlip('slip', '164518117;;;-;11.25;1;Maç Bahsi;164518117')">
<div class="div1" style="width: 288px;" onclick="parent.javaScriptAddSlip('slip', '164518117;;;-;6.50;0;Maç Bahsi;164518117')">,
<div class="div1" style="width: 288px;" onclick="parent.javaScriptAddSlip('slip', '164518117;;;-;1.18;2;Maç Bahsi;164518117')">

Respuesta popular

Primero, instale el paquete nuget HTMLAgilityPack en su proyecto.

Entonces, como ejemplo:

HtmlAgilityPack.HtmlDocument htmlDoc = new HtmlAgilityPack.HtmlDocument();

// There are various options, set as needed
htmlDoc.OptionFixNestedTags=true;

// filePath is a path to a file containing the html
htmlDoc.Load(filePath);

// Use:  htmlDoc.LoadHtml(xmlString);  to load from a string (was htmlDoc.LoadXML(xmlString)

// ParseErrors is an ArrayList containing any errors from the Load statement
if (htmlDoc.ParseErrors != null && htmlDoc.ParseErrors.Count() > 0)
{
    // Handle any parse errors as required

}
else
{

    if (htmlDoc.DocumentNode != null)
    {
        HtmlAgilityPack.HtmlNode bodyNode = htmlDoc.DocumentNode.SelectSingleNode("//body");

        if (bodyNode != null)
        {
            // Do something with bodyNode
        }
    }
}

(Nota: este código es solo un ejemplo y no es necesariamente el mejor / el único enfoque. No lo use a ciegas en su propia aplicación).

El método HtmlDocument.Load() también acepta un flujo que es muy útil en la integración con otras clases orientadas al flujo en el marco .NET. Mientras que HtmlEntity.DeEntitize() es otro método útil para procesar entidades html correctamente. (gracias Matthew)

HtmlDocument y HtmlNode son las clases que más utilizará. Similar a un analizador XML, proporciona los métodos selectSingleNode y selectNodes que aceptan expresiones XPath.

Preste atención al HtmlDocument.Option?????? propiedades booleanas. Estos controlan cómo los métodos Load y LoadXML procesarán su HTML / XHTML.

También hay un archivo de ayuda compilado llamado HtmlAgilityPack.chm que tiene una referencia completa para cada uno de los objetos. Esto normalmente está en la carpeta base de la solución.




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é