Search code examples
xpathxpathquery

xpath query multiple conditions


<div class='table-wrap'>
<table class='dashTable'><tbody>
<tr>
<td class='dashBoard'><b>ID</b></td>
<td class='dashBoard'><b>Name</b></td>
<td class='dashBoard'><b>TEP</b></td>
<td class='dashBoard'><b>Status</b></td>
</tr>
<tr>
<td class='dashBoard'>001</td>
<td class='dashBoard'>Liam</td>
<td class='dashBoard'><font color="#00875a"><b>2-Nov-2022 1 PM CET</b> </font></td>
<td class='dashBoard'> </td>
</tr>
<tr>
<td class='dashBoard'>002</td>
<td class='dashBoard'> <b><font color="#00875a">Noah</font></b></td>
<td class='dashBoard'>  <b><font color="#00875a">2-Nov-2022 1 PM CET</font></b> </td>
<td class='dashBoard'> </td>
</tr>
<tr>
<td class='dashBoard'>003</td>
<td class='dashBoard'> <b><font color="#00875a">James</font></b></td>
<td class='dashBoard'><font color="#00875a"><b>2-Nov-2022 1 PM CET</b> </font></td>
<td class='dashBoard'> </td>
</tr>
<tr>
<td class='dashBoard'>004</td>
<td class='dashBoard'>Lucas<br/>
 <del>Lauren</del><br/>
 <b><font color="#00875a">Lucie</font></b></td>
<td class='dashBoard'>   <b><font color="#00875a">2-Nov-2022 6 PM JST</font></b></td>
<td class='dashBoard'> </td>
</tr>
</tbody></table>
</div>

I'm trying to write a query by which from every td[2] I will grab only the element b[font], but if td[2] does not have b[font], then it should select the entire td[2] attribute with all its elements.

I've stopped on this, the query finds only b[font], but skips td[2] if there are no child elements:

//div[@class="table-wrap"]/table/tbody/tr/td[2]/b[font]

Thank you in advance!


Solution

  • This XPath will get elements as requested

    //div[@class="table-wrap"]/table/tbody/tr/td[2]/b[font] | //div[@class="table-wrap"]/table/tbody/tr/td[position()=2 and not(b[font])]
    

    Result

    <td class="dashBoard"><b>Name</b></td>
    <td class="dashBoard">Liam</td>
    <b><font color="#00875a">Noah</font></b>
    <b><font color="#00875a">James</font></b>
    <b><font color="#00875a">Lucie</font></b>