HTML Agility Packを使用して次の要素を選択する

c# html html-agility-pack

質問

私は、HTMLのアジリティパックを使用して、子のh4要素に、 "RelayClinical Patient Education with Animations Install zip"を持つclass="fileHeader" divを検索しています。いったん見つけられると、その特定のブロックのアンカータグ内に"href"属性を取り込みたいと思います。どうすれば入手できますか?

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>

コード

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

受け入れられた回答

h4要素を選択するのではなく、 a要素を直接選択します。次に、 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

ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow