Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

XPath selecting element and following element

Tags:

xpath

I have a large table of data roughly laid out as follows. As requested below is a full sample rather than a simplification.

<table class="grid resultRaceGrid" id="mainGrid">
<tr>
    <th width="10">&nbsp;</th>
    <th>&nbsp;</th>
    <th>&nbsp;</th>
    <th>HORSE/SP</th>
    <th>AGE</th>
    <th>WGT</th>
    <th>TRAINER/JOCKEY</th>
    <th>OR</th>
    <th>TS</th>
    <th>RPR</th>
    <th width="10">&nbsp;</th>
</tr>
<tr>
    <td colspan="11" class="separator">&nbsp;</td>
</tr>
<tr>
    <td rowspan="2" class="last"><a href="/horses/result_home.sd?race_id=443557&amp;r_date=2007-11-21&amp;popup=yes" class="bull"><b>&laquo;</b></a></td>
    <td rowspan="2" class="nowrap noPad"><h3>1 </h3></td>
    <td rowspan="2" class="dstDesc"></td>
    <td class="nowrap"><span class="black"><a href="#" id="noteIcon_673823" class="pencil" onclick="return false;"><!-- --></a><b><a href="/horses/horse_home.sd?horse_id=673823" onclick="return popup(this, {width:695, height:800})" title="Full details about this HORSE">Andytown</a></b> (IRE) 6/4F <img src="http://ui.racingpost.com/ico/tipping-success.gif" class="shilda" title="Tipped by Topspeed" alt="" /></span></td>
    <td class="black">5</td>
    <td class="nowrap black"><span>11-1&nbsp;<span class="lightGray"></span></span></td>
    <td class="nowrap black"><a href="/horses/trainer_home.sd?trainer_id=13176" onclick="return popup(this, {width:695, height:800})" title="Full details about this TRAINER">N G Richards</a></td>
    <td rowspan="2" class="lightGray">&mdash;</td>
    <td rowspan="2" class="lightGray"><span class="red bold">*</span></td>
    <td rowspan="2" class="last"><span class="red bold">*</span></td>
    <td rowspan="2" class="last"><a href="/horses/result_home.sd?race_id=450083&amp;r_date=2008-03-08&amp;popup=yes" class="bull"><b>&raquo;</b></a></td>
</tr>
<tr>
    <td colspan="3"><span class="pedigrees">ch g <a href="/bloodstock/stallionbook/stallion_home.sd?horse_id=42337&amp;popup=1" onclick="return popup(this, {width:734, height:800})" title="Full details about this STALLION">Old Vic</a> - <a href="/bloodstock/dam_home.sd?horse_id=519458" onclick="return popup(this, {width:695, height:800})" title="Full details about this DAM ">Pitfire (IRE)</a> (<a href="/bloodstock/stallionbook/stallion_home.sd?horse_id=303796&amp;popup=1" onclick="return popup(this, {width:734, height:800})" title="Full details about this STALLION">Parliament</a>)</span></td>
    <td class="lightGray"><a href="/horses/jockey_home.sd?jockey_id=82320" onclick="return popup(this, {width:695, height:800})" title="Full details about this JOCKEY">Fearghal Davis</a><sup>5</sup></td>
</tr>
<tr class="rowComment hideComment">
    <td colspan="3">&nbsp;</td>
    <td colspan="7"><div class="commentText">   Went prominent 6th, challenged 2 out, soon ridden, narrow advantage last, forged clear towards finish (tchd 7-4)</div></td>
    <td>&nbsp;</td>
</tr>
<tr>
    <td colspan="11" class="separator">&nbsp;</td>
</tr>

I have the following XPath which allows me to correctly match an entire row of interest.

My question is: how can I select this tr together with the following two tr elements (following it).

$xpath->query("//table[@id='mainGrid']//tr[descendant::a[contains(@href,'horse_home')]]"

1 Answers

Use:

//table[@id='mainGrid']
      //tr[descendant::a
              [contains(@href,'horse_home')]
          ]
 |
    //table[@id='mainGrid']
          //tr[descendant::a
                  [contains(@href,'horse_home')]
              ]
               /following-sibling::tr[not(position() > 2)]

This XPath expression refines your previous selection, specifying that the union of it with at-most two tr following siblings (of your previous selected tr element) should be selected.

like image 191
Dimitre Novatchev Avatar answered Mar 20 '26 07:03

Dimitre Novatchev



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!