XPath条件谓词

时间:2016-04-15 17:59:35

标签: xml xpath

<table>
  <tr>
    <td></td>
    <td rowspan=2></td> 
    <td></td>  <-- select
  </tr>
  <tr>
    <td></td>
    <td></td>  <-- select
  </tr>
    <tr>
    <td></td>
    <td></td>
    <td></td>  <-- select
  </tr>
  <tr>
    <td></td>
    <td></td>
    <td></td>  <-- select
  </tr>
</table>

我正在尝试使用xpath 1.0构造一个表达式,它将在前面的/ tr / td节点集中包含rowspan的情况下选择第二个/ tr / td节点,在所有其他情况下使用第三个td。这可能吗?

EDIT ::: 澄清一下,这不是last()就足够的实际数据。 td节点的实际数量是不确定的。

2 个答案:

答案 0 :(得分:1)

丑陋但有效:

/table/tr/td[2][../preceding-sibling::*[1]/td/@rowspan] | /table/tr/td[3][not(../preceding-sibling::*[1]/td/@rowspan)]

答案 1 :(得分:0)

你可以试试这个:

httpPromise = $http.get('/materials/:name');

使用以下xml:

//td[count(@rowspan)>0]/following-sibling::*[name()='td'][1] | //td[position()=3 and not ( preceding-sibling::*[name()='td' and count(@rowspan)>0] )]

它会产生:

<table>
  <tr>
    <td rowspan="2"></td> 
    <td>following rowspan 1</td>
    <td>following rowspan 2</td>
  </tr>
  <tr>
    <td></td>
    <td></td>
    <td>third1</td>
  </tr>
    <tr>
    <td></td>
    <td></td>
    <td>third2</td>
  </tr>
  <tr>
    <td></td>
    <td></td>
    <td>third3</td>
  </tr>
</table>