Wie bekomme ich die nächsten 2 Knoten in HTML + HTMLAgilitypack?

c# html-agility-pack

Frage

Ich habe eine Tabelle im folgenden HTML-Code:

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

Wie kann ich den inneren Text der nächsten 2 <tr> -Tags nach der Tabelle erhalten, die den Text "Meine Adresse" enthält?

Akzeptierte Antwort

Sie können folgenden XPath verwenden:

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);
}

Der Schlüssel für den obigen XPath-Code lautet following-sibling mit position() -Filter.

UPDATE:

Ein bisschen Erklärung über den XPath, der in dieser Antwort verwendet wird:

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

über dem Teil wählen Sie <tr> -Element mit:

  • child <td> -Element, das ein untergeordnetes <h3> -Element mit dem Wert "My Address" hat

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

nächster Teil wählt folgendes <tr> -Element mit der Position <= 2 des aktuellen <tr> -Elements (dasjenige, das vom vorherigen XPath-Teil ausgewählt wurde)

/td

Der letzte Teil selektiert das Kind <td> Element vom aktuellen <tr> Element



Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum
Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum