Comment obtenir les 2 prochains nœuds en HTML + HTMLAgilitypack

c# html-agility-pack

Question

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>&#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>

Comment puis-je obtenir le texte intérieur des 2 balises <tr> après le tablerow contenant le texte "Mon adresse?"

Réponse acceptée

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:

  • élément child <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




Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi