C # HtmlAgilityPack Selecciona una tabla de h2 específica

c# html html-agility-pack parsing

Pregunta

Tengo algunos html:

<h2>Results</h2>
 <div class="box">
 <table class="tFormat">
      <th>Head</th>
      <tr>1</tr>
 </table>
</div>

<h2>Grades</h2>
 <div class="box">
 <table class="tFormat">
      <th>Head</th>
      <tr>1</tr>
 </table>
</div>

Me preguntaba cómo obtendría la tabla en "Resultados"

He intentado:

        var nodes = doc.DocumentNode.SelectNodes("//h2");

        foreach (var o in nodes)
        {
            if (o.InnerText.Equals("Results"))
            {
                foreach (var c in o.SelectNodes("//table"))
                {
                    Console.WriteLine(c.InnerText);             
                }
            }
        }

Funciona pero también obtiene la tabla en los grados h2

Respuesta aceptada

Tenga en cuenta que el div no está jerárquicamente dentro del encabezado, por lo que no tiene sentido buscarlo allí.

Esto puede funcionar para usted: encuentra el siguiente elemento después del título:

if (o.InnerText.Equals("Results"))
{
    var nextDiv = o.NextSibling;
    while (nextDiv != null && nextDiv.NodeType != HtmlNodeType.Element)
        nextDiv = nextDiv.NextSibling;
    // nextDiv should be correct here.
}

También puedes escribir un xpath más específico para encontrar solo ese div:

doc.DocumentNode.SelectNodes("//h2[text()='Results']/following-sibling::div[1]");

Respuesta popular

 var nodes = doc.DocumentNode.SelectNodes("//h2");

        if (nodes.FirstOrDefault()!=null)
        {
            var o=nodes.FirstOrDefault();
            if (o.InnerText.Equals("Results"))
            {
                foreach (var c in o.SelectNodes("//table"))
                {
                    Console.WriteLine(c.InnerText);             
                }
            }
        }


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é