HTMLアジャイル・パックでDOMをトラバースする

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

質問

私はHTMLAgilityPackライブラリを使ってC#でHTML DOMを解析していますが、特定の要素に到達したらDOMをどのようにトラバースするかを知りたいと思います。

例えば、あるクラスのクラスでtdに行くと、3番目の兄弟のtdに行き、ネストされたanchor hrefを取得したいと考えています。

<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を学び、あなたの仕事はずっと簡単になります。たとえば、クラス属性が「some-class」の<td>要素を取得するには、このXpathを使用します。

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

そして3番目の兄弟<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
}

GetAttributeValue()値を取得するより安全な方法は、 GetAttributeValue()メソッドをGetAttributeValue()しています:

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

2番目の引数は、属性が見つからないときに返されるデフォルト値です。




ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ