analizar un elemento en un div con el paquete de agilidad html [C #]

c# html html-agility-pack parsing

Pregunta

Estoy usando Html Agility Pack en un sitio web para extraer algunos datos. Analizar parte del HTML que necesito es fácil, pero estoy teniendo problemas con este (¿un poco complejo?) Fragmento de HTML.

<tr>
  <td>
    <div onmouseover="toggle('clue_J_1_1', 'clue_J_1_1_stuck', '<em class=&quot;correct_response&quot;>Obama</em><br /><br /><table width=&quot;100%&quot;><tr><td class=&quot;right&quot;>Kailyn</td></tr></table>')" onmouseout="toggle('clue_J_1_1', 'clue_J_1_1_stuck', 'Michelle LaVaughn Robinson')" onclick="togglestick('clue_J_1_1_stuck')">
... 

Necesito obtener el valor de la clase em "correct_response" en el div onmouseover basado en el valor clue_J_X_Y. Realmente no sé cómo ir más allá de esto ..

<tr>
  <td>
    <div onmouseover="toggle('clue_J_1_1', 'clue_J_1_1_stuck', '<em class=&quot;correct_response&quot;>Obama</em><br /><br /><table width=&quot;100%&quot;><tr><td class=&quot;right&quot;>Kailyn</td></tr></table>')" onmouseout="toggle('clue_J_1_1', 'clue_J_1_1_stuck', 'Michelle LaVaughn Robinson')" onclick="togglestick('clue_J_1_1_stuck')">
... 

Un poco de ayuda sería apreciada.

Respuesta popular

No sé qué se supone que debes sacar de ellos. Pero te daré todos los datos que dices que necesitas para resolverlo.

Primero cargamos el HTML.

    string html = "<tr>" +
        "<td>" +
        "<div onmouseover = \"toggle('clue_J_1_1', 'clue_J_1_1_stuck', '<em class=&quot;correct_response&quot;>Obama</em><br/><br/><table width=&quot;100%&quot;><tr><td class=&quot;right&quot;>Kailyn</td></tr></table>')\" onmouseout = \"toggle('clue_J_1_1', 'clue_J_1_1_stuck', 'Michelle LaVaughn Robinson')\" onclick = \"togglestick('clue_J_1_1_stuck')\"></div></td></tr>";
    HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
    doc.LoadHtml(html);
    //Console.WriteLine(doc.DocumentNode.OuterHtml);

Entonces obtenemos el valor del atributo, onmouseover.

    string html = "<tr>" +
        "<td>" +
        "<div onmouseover = \"toggle('clue_J_1_1', 'clue_J_1_1_stuck', '<em class=&quot;correct_response&quot;>Obama</em><br/><br/><table width=&quot;100%&quot;><tr><td class=&quot;right&quot;>Kailyn</td></tr></table>')\" onmouseout = \"toggle('clue_J_1_1', 'clue_J_1_1_stuck', 'Michelle LaVaughn Robinson')\" onclick = \"togglestick('clue_J_1_1_stuck')\"></div></td></tr>";
    HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
    doc.LoadHtml(html);
    //Console.WriteLine(doc.DocumentNode.OuterHtml);

Devolverá un error si no pudo encontrar un atributo llamado "onmouseover". Ahora obtenemos los parámetros del método de alternancia donde cada uno está encerrado por dos '(apóstrofe).

    string html = "<tr>" +
        "<td>" +
        "<div onmouseover = \"toggle('clue_J_1_1', 'clue_J_1_1_stuck', '<em class=&quot;correct_response&quot;>Obama</em><br/><br/><table width=&quot;100%&quot;><tr><td class=&quot;right&quot;>Kailyn</td></tr></table>')\" onmouseout = \"toggle('clue_J_1_1', 'clue_J_1_1_stuck', 'Michelle LaVaughn Robinson')\" onclick = \"togglestick('clue_J_1_1_stuck')\"></div></td></tr>";
    HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
    doc.LoadHtml(html);
    //Console.WriteLine(doc.DocumentNode.OuterHtml);

Después de eso tenemos una lista con 3 entidades. En este caso contendrá lo siguiente.

  • clue_J_1_1
  • clue_J_1_1_stuck
  • <em class = "correct_response"> Obama </em> <br/> <br/> <table width = "100%"> <tr> <td class = "right"> Kailyn </td> </tr> </table>;

Ahora podemos crear un nuevo documento HtmlDocument con el código HTML del tercer parámetro. Pero primero tenemos que convertirlo en HTML viable ya que el tercer parámetro contiene caracteres de escape de HTML.

    string html = "<tr>" +
        "<td>" +
        "<div onmouseover = \"toggle('clue_J_1_1', 'clue_J_1_1_stuck', '<em class=&quot;correct_response&quot;>Obama</em><br/><br/><table width=&quot;100%&quot;><tr><td class=&quot;right&quot;>Kailyn</td></tr></table>')\" onmouseout = \"toggle('clue_J_1_1', 'clue_J_1_1_stuck', 'Michelle LaVaughn Robinson')\" onclick = \"togglestick('clue_J_1_1_stuck')\"></div></td></tr>";
    HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
    doc.LoadHtml(html);
    //Console.WriteLine(doc.DocumentNode.OuterHtml);

Y hecho. El código en su totalidad está abajo de aquí.

    string html = "<tr>" +
        "<td>" +
        "<div onmouseover = \"toggle('clue_J_1_1', 'clue_J_1_1_stuck', '<em class=&quot;correct_response&quot;>Obama</em><br/><br/><table width=&quot;100%&quot;><tr><td class=&quot;right&quot;>Kailyn</td></tr></table>')\" onmouseout = \"toggle('clue_J_1_1', 'clue_J_1_1_stuck', 'Michelle LaVaughn Robinson')\" onclick = \"togglestick('clue_J_1_1_stuck')\"></div></td></tr>";
    HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
    doc.LoadHtml(html);
    //Console.WriteLine(doc.DocumentNode.OuterHtml);



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é