Selezione dell'elemento successivo con HTML Agility Pack

c# html html-agility-pack

Domanda

Sto usando HTML Agility Pack e sto cercando div con class="fileHeader" che ha "RelayClinical Patient Education with Animations Install zip" in un elemento figlio h4. Una volta trovato, voglio catturare l'attributo "href" all'interno del tag anchor di quel particolare blocco. Come posso averlo?

Sorgente HTML

<div class="fileHeader" id="fileHeader_7311111">
    <h4 class="collapsed">RelayClinical Patient Education with Animations Install zip</h4>
    <div class="defaultMethod">
        <a class="buttonGrey" href="https://mckc-esd.subscribenet.com/cgi-bin/download?rid=2511740931&amp;rp=DTM20130905162949MzcyODIwNjM0" title="Clicking this link will open a new window." rel="noreferrer">
            HTTPS Download
        </a>
    </div>
</div>

Codice

HtmlNodeCollection fileHeaderNodes = bodyNode.SelectNodes("//div[@class='fileHeader']//h4");
foreach (HtmlNode fileHeader in fileHeaderNodes)
{
    if (fileHeader.InnerText.Trim() == "RelayClinical Patient Education with Animations Install zip")
    {
        HtmlNodeCollection fileHeaderNodes = bodyNode.SelectNodes("//div[@class='fileHeader']//h4");
        foreach (HtmlNode fileHeader in fileHeaderNodes)
        {
            if (fileHeader.InnerText.Trim() == "RelayClinical Patient Education with Animations Install zip")
            {
                foreach (HtmlNode link in fileHeader.SelectNodes("//a[@href]"))
                {
                    // extract the link and put in dataUrl var
                    if ((link.InnerText.Trim() == "HTTPS Download") && isFound == true)
                    {
                        count++;
                        // select all a tags (html anchor tags) that have a href attribute
                        HtmlAttribute att = link.Attributes["href"];
                        dataUrl = att.Value;
                    }
                }
            }
        }
    }
}

Risposta accettata

Invece di selezionare l'elemento h4 , seleziona direttamente a elemento. Quindi puoi prendere l'attributo href .

var h4Text = "RelayClinical Patient Education with Animations Install zip";
var xpath = String.Format(
    "//div[@class='fileHeader' and h4='{0}']/div[@class='defaultMethod']/a",
    h4Text
);
var anchor = doc.DocumentNode.SelectSingleNode(xpath);
if (anchor != null)
{
    var attr = anchor.GetAttributeValue("href", null);
    // do stuff with attr
}


Related

Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow