HtmlAgilityPack omitir o eliminar tabla anidada

html-agility-pack

Pregunta

Estoy usando HtmlAgilityPack para recuperar el siguiente html (observe la tabla anidada):

<table class="123">
<tr>
    <table class="789">
    <tr>
        <td>abc</td>
    </tr>
    <tr>
        <td>def</td>
    </tr>
    </table>
</tr>

<tr>
    <td>info 1</td>
</tr>

<tr>
    <td>info 2</td>
</tr>

<tr>
    <td>info 3</td>
</tr>
</table>

Ahora, estoy tratando de encontrar una forma inteligente de obtener información de la tabla principal y otra información de la tabla anidada ...

Hasta ahora tengo lo siguiente:

var parentTable = document.DocumentNode.SelectNodes("//table[@class='123']").FirstOrDefault();

var nestedTable = parentTable.SelectNodes("//table[@class='789']").FirstOrDefault();

Ahora puedo jugar con la tabla anidada y obtener lo que quiero (abc, def) ...

Pero cuando trato de obtener los <tr> de la tabla principal de esta forma:

var parentTableRows = parentTable.SelectNodes(".//tr");

Parece incluir (en la colección) los <tr> de la tabla anidada también ...

En otras palabras, de acuerdo con el código html anterior, esperaba tener una colección de 4 <tr> pero como incluye los <tr> de la tabla anidada, obtendré una Colección de 6 <tr> s.

¿Cómo puedo omitir el primer <tr> que pasa por mantener la tabla anidada para poder jugar y obtener la información que quiero (info1, info2, info3) (espero que tenga sentido ...)

¡Gracias por adelantado!

Respuesta aceptada

// es una expresión XPATH que significa "escanear todos los nodos y subnodos". Es por eso que //tr obtiene todo tr debajo de la raíz.

Si solo hace parentTable.SelectNodes("tr") (o "./tr" que es equivalente), seleccionará todas las TR debajo de la raíz.

Si desea omitir el primero, puede agregar un filtro XPATH en la position() del elemento position() (una función XPATH):

var parentTableRows = parentTable.SelectNodes("tr[position() > 1]");


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é