2015-10-06 58 views
0

我对如何使用max XPath的()函数,使用MAX()函数的XPath

如果考虑下面的XML的一个问题,我需要选择中有孩子<td>的最大数量的<tr>元素。

<doc> 
    <table> 
     <tbody> 
      <tr> 
       <td>aa</td> 
       <td>bb</td> 
       <td>cc</td> 
       <td>dd</td> 
      </tr> 
      <tr> 
       <td>nn</td> 
       <td>oo</td> 
      </tr> 
      <tr> 
       <td>qq</td> 
       <td>rr</td> 
       <td>ss</td> 
       <td>tt</td> 
       <td>uu</td> 
       <td>vv</td> 
       <td>xx</td> 
       <td>yy</td> 
       <td>zz</td> 
      </tr> 
     </tbody> 
    </table> 
</doc> 

所以我写了下面的XPath查询

tr[max(count(child::td))] 

但它不返回任何结果。谁能告诉我一个查询,我可以得到<tr>其中有最大数量的子<td> s?

+0

如果多个'tr'具有相同数量的'td'(这是最大值),会发生什么? –

+0

@Damien_The_Unbeliever,那么应该选择两个 – sanjay

回答

2

认为这表达给你你想要的东西:

//tr[count(./td)>=count(following-sibling::tr/td) and 
    count(./td)>=count(preceding-sibling::tr/td)] 

也就是说,我们希望当前节点的计数td s到大于或等于前述任一节点的td的计数s和任何后续节点td s。

您可能需要调整的出发点(我只是去任何tr//开始),并根据所需要的关系,在sibling轴可能需要更改为纯followingpreceding