2013-04-05 101 views
0

我有以下为HTML创建Xpath麻烦: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节点(如它没有孩子)或者它的跨度为class =“span2”的内容。 例如,对于这个网站,它应该返回

Out,In,In 

我了XPath,将返回需要跨节点,它看起来像:

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

,我得到了XPath,将返回我的每一个简单的内容3D TD节点:

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

但我只需要一个Xpath的,因为对我来说是必须要有的“IN”或“出”值的权排序(它们在表中排序)

回答

1

这将做到这一点,不知道这将是你的 “文集” 如何稳健:

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

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


更新

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

不幸的是,”不是正确的答案 - 它会产生正确的产出,但不是以正确的方式 - 它会产生不检查@节点。 – 2013-04-05 12:50:09

+0

您想要检查哪个节点? – MattH 2013-04-05 12:51:03

+0

它适用于您提供的样品。您可能需要扩展您的示例以说明它如何不起作用 – MattH 2013-04-05 12:52:01

相关问题