私は下のHTMLコードの表を持っています:
<table style="padding: 0px; border-collapse: collapse;">
<tr>
<td><h3>My Regional Financial Office</h3></td>
</tr>
<tr>
<td> </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> </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>
要素:
<h3>
要素を持つ子<td>
要素/following-sibling::tr[position() <= 2]
次の部分は、 現在の<tr>
要素 (以前のXPath部分で選択された要素 )から位置<= 2の次の<tr>
要素を選択し、
/td
現在の<tr>
要素の最後の部分の子<td>
要素を選択します。