2013-04-05 6 views
0

У меня возникли проблемы при создании Xpath для следующего HTML:Xpath матч текущего узла или один из дочерних узлов

<html> 
<body> 
<table class="tablesorter"> 
<tbody>  
    <tr class="tr_class"> 
        <td>{some td info}</td> 
        <td>{some td info}</td>      
        <td> 
         <span class="span1"> 
          <span class="span2">Out</span> 
          <span class="span3">SMTH</span> 
          <span class="span4">Out</span> 
         </span> 
        </td> 
    </tr> 

    <tr class="tr_class"> 
        <td>{some td info}</td> 
        <td>{some td info}</td>      
        <td>In</td> 
    </tr> 

    <tr class="tr_class"> 
        <td>{some td info}</td> 
        <td>{some td info}</td>      
        <td>In</td> 
    </tr> 

</tbody> 
</table> 
</body> 
</html> 

То, что я хочу, чтобы создать Xpath, который будет возвращать мне содержание каждого третьего узла TD (если у него нет детей) или содержимого его диапазона, который имеет класс = «span2». Например, для этого HTML он должен вернуть

Out,In,In 

У меня есть Xpath, который будет возвращать необходимый узел диапазона, он выглядит следующим образом:

//table[@class = 'tablesorter']//td[3]/descendant::*[@class='span2']/text() 

и я Xpath, что вернет мне простое содержание каждого 3d узлы тд:

//table[@class = 'tablesorter']//td[3][count(descendant::*)=0]/text() 

Но мне нужно только одно Xpath, потому что для меня нужно иметь правильный порядок «в» или ценностей «Out» (их упорядочение в таблице)

ответ

1

Это будет делать это, не знаю, насколько прочной она будет для "корпус":

//table[@class="tablesorter"]/tbody/tr/td[3]/descendant::text()[normalize-space(.)!=""] 

['Out', 'In', 'In']


Update

//table[@class="tablesorter"]/tbody/tr/td[3]/descendant::text()[normalize-space(.)!=""][parent::td or parent::span[@class="span2"]] 
+0

, к сожалению, что» t не правильный ответ - он будет производить правильный вывод, но не в правильном направлении - он делает sn't проверить @ класс узлов. –

+0

Какие узлы вы хотите проверить для класса? – MattH

+0

Он отлично работает с образцом, который вы предоставили. Возможно, вам нужно будет расширить свой образец, чтобы продемонстрировать, как он не работает. – MattH

Смежные вопросы