使用HTML Agility Pack遍歷DOM

.net asp.net c# html html-agility-pack

我正在使用HTMLAgilityPack庫在C#中解析HTML DOM,並且想知道在到達特定元素後如何遍歷DOM。

例如,當我使用“some-class”類訪問td時,我想轉到第三個兄弟td並獲取其嵌套anchorhref

<td class="some-class">Content I care about</td>
<td>Content I don't want</td>
<td>Content I don't want</td>
<td>    
    <a href="http://www.the-url-I-want.com">Some Amazing URL</a>
</td>

目前,我降落在td我想通過:

foreach(HtmlNode node in doc.DocumentNode.SelectNodes("//td"))
{
    HtmlAttribute nodeClass = node.Attributes["class"];

    if(nodeClass != null && nodeClass.Value == "some-class")
    {
        //Find the anchor that is 3 siblings away
        //Do something
    }
}

有誰知道如何使用HTMLAgility包來獲取個人td的相關錨點?

熱門答案

學習XPath,你的工作可以輕鬆多了。例如,要獲取具有class屬性等於“some-class”的<td>元素,我們可以使用此Xpath:

//td[@class='some-class']

並獲得第三個下一個兄弟<td>

/following-sibling::td[3]

所以你的循環可以重寫如下:

var xpath = "//td[@class='some-class']/following-sibling::td[3]/a";
foreach(HtmlNode a in doc.DocumentNode.SelectNodes(xpath))
{
    //Do something with the anchor variable a
}

BTW,獲取屬性值的更安全的方法是使用GetAttributeValue()方法:

var href = a.GetAttributeValue("href", "");

第二個參數是未找到屬性時將返回的默認值。




許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因