J'ai un tableau dans le code HTML ci-dessous:
<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>
Comment puis-je obtenir le texte intérieur des 2 balises <tr>
après le tablerow contenant le texte "Mon adresse?"
Vous pouvez utiliser XPath suivant:
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);
}
La clé ci-dessus de XPath utilise le filtre following-sibling
avec le filtre position()
.
METTRE À JOUR :
Une petite explication sur le XPath utilisé dans cette réponse:
//tr[td/h3[.='My Address']]
au-dessus de la partie, sélectionnez <tr>
élément qui a:
<td>
élément child <h3>
dont la valeur est égale à 'Mon adresse' /following-sibling::tr[position() <= 2]
la partie suivante sélectionne l'élément <tr>
avec la position <= 2 à partir de l'élément <tr>
actuel (celui sélectionné par la partie XPath précédente)
/td
la dernière partie sélectionne l'élément <td>
enfant de l'élément <tr>
actuel