HTML + HTMLAgilitypackで次の2ノードを取得する方法

c# html-agility-pack

質問

私は下のHTMLコードの表を持っています:

<table style="padding: 0px; border-collapse: collapse;">
    <tr>
        <td><h3>My Regional Financial Office</h3></td>
    </tr>
    <tr>
        <td>&#160;</td>
    </tr>
    <tr>
        <td><h3>My Address</h3></td>
    </tr>
    <tr>
        <td>000 Test Ave S Ste 000</td>
    </tr>
    <tr>
        <td>Golden Valley, MN 00000</td>
    </tr>
    <tr>
        <td><a href="javascript:submitForm('0000','0000000');">Get Directions</a></td>
    </tr>
    <tr>
        <td>&#160;</td>
    </tr>
</table>

"My Address?"というテキストを含むtablerowの後に、次の2つの<tr>タグの内側のテキストを取得するにはどうすればよいですか?

受け入れられた回答

次のXPathを使用できます。

var htmlDoc = new HtmlDocument();
htmlDoc.LoadHtml(html);
var tdOfInterests = 
        htmlDoc.DocumentNode
               .SelectNodes("//tr[td/h3[.='My Address']]/following-sibling::tr[position() <= 2]/td");
foreach (HtmlNode td in tdOfInterests)
{
    //given html input in question following code will print following 2 lines:
    //000 Test Ave S Ste 000
    //Golden Valley, MN 00000
    Console.WriteLine(td.InnerText);
}

上のXPathのキーは、 position()フィルタを使用しfollowing-siblingを使用していfollowing-sibling

更新:

この回答に使用されているXPathの説明

//tr[td/h3[.='My Address']]

上記の部分を選択する<tr>要素:

  • 値が 'My Address'と等しい子<h3>要素を持つ子<td>要素

/following-sibling::tr[position() <= 2]

次の部分は、 現在の<tr>要素 (以前のXPath部分で選択された要素 )から位置<= 2の次の<tr>要素を選択し、

/td

現在の<tr>要素の最後の部分の子<td>要素を選択します。



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