HTMLAgilitypack che verifica il valore dell'attributo del nodo principale

c# html-agility-pack

Domanda

Ecco il contesto: utilizzo HTMLAgilityPack per selezionare il nodo P in questo modo:

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

Quindi usando un ciclo for, ti piace testare ogni volta, se il genitore di questo elemento DOM è un DIV e contiene un attributo specifico come: div[@edth_correction='N']

Ma non ho idea di come ottenere il nodo genitore, ho già scritto tutto il codice per il lavoro che devo fare.

So che posso fare qualcosa del genere: paragraphe[i].ParentNode.Attributes.Equals() ma non ho idea di cosa scrivere in questo equals e se è quello che devo usare per il mio caso.

Risposta accettata

Prova in questo modo

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
    }
}

Un altro modo: controlla il nodo genitore e l'attributo 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
}

Per provare gli antenati del nodo prova questo

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
}

Non sono sicuro del secondo approccio. Dal momento che non conosco la tua fonte di dati.

Inoltre puoi provare XPath

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


Related

Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché