HTMLAgilitypack prueba el valor del atributo del nodo principal

c# html-agility-pack

Pregunta

Aquí está el contexto: uso HTMLAgilityPack para seleccionar el nodo P de esta manera:

var paragraphe = html.DocumentNode.SelectNodes(".//p[not(descendant::p)]");

Luego, utilizando un bucle for, me gustaría probar cada vez, si el elemento primario de este elemento DOM es un DIV y contiene un atributo específico como: div[@edth_correction='N']

Pero no tengo idea de cómo obtener el nodo principal, ya he escrito todo el código para el trabajo que tengo que hacer.

Sé que puedo hacer algo como esto : paragraphe[i].ParentNode.Attributes.Equals() pero no tengo idea de qué escribir en estos iguales y si es lo que tengo que usar para mi caso.

Respuesta aceptada

Prueba de esta manera

var paragraphe = html.DocumentNode.SelectNodes(".//p[not(descendant::p)]");

for (int i = 0; i < paragraphe.Count; i++)
{
    var parent = paragraphe[i].ParentNode;

    if (parent.Name == "div" &&
        parent.ChildAttributes("edth_correction").Any(a => a.Value == "N"))
    {
        // do work
    }
}

Otra forma: verifique el nodo padre y el atributo con XPath.

var paras = html.DocumentNode.SelectNodes(
    "//p[not(descendant::p) and name(..)='div' and ../@edth_correction='N']");

foreach (var p in paras)
{
    // do work
}

Para probar los ancestros del nodo prueba esto

var paragraphe = html.DocumentNode.SelectNodes(".//p[not(descendant::p)]");

for (int i = 0; i < paragraphe.Count; i++)
{
    foreach (var ancestor in paragraphe[i].Ancestors("div"))
    {
        if (ancestor.ChildAttributes("edth_correction").Any(a => a.Value == "N"))
        {
            // do work
        }
    }
}

O con XPath

var paras = html.DocumentNode.SelectNodes(
    "//p[not(descendant::p) and ancestor::div/@edth_correction='N']");

foreach (var p in paras)
{
    // do work
}

No estoy seguro sobre el segundo enfoque. Como no conozco tu fuente de datos.

También puedes probar XPath

"//p[not(descendant::p) and ancestor::*[name(.)='div' and ./@edth_correction='N']]"


Related

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é