2016-11-25 47 views
0

鉴于此片段:的XPath轴工作不正常

<tr class="ng-scope" ng-repeat="config in list.elements"> 
    <td class="ng-binding">6grxe</td> 
    <td class="ng-binding">ComplexTest</td> 
    <td class="ng-binding">2016-11-25 10:35:03</td> 
</tr> 
<tr class="ng-scope" ng-repeat="config in list.elements"> 
    <td class="ng-binding">l7yc</td> 
    <td class="ng-binding">SimpleTest</td> 
    <td class="ng-binding">2016-11-25 10:35:15</td><!--how to locate this ?--> 
</tr> 

我试图找到使用XPath这样的Firefox控制台上的标记元素:

$x("//following-sibling::td[text()='SimpleTest']") 

但是,返回的元素是

<td class="ng-binding">SimpleTest</td> 

我的xpath有什么问题?

回答

0

我想你想要的路径//td[. = 'SimpleTest']/following-sibling::td[1]选择td内容SimpleTest紧接在td之后的td元素。

+0

是的,它的工作原理。你能否请添加一些解释。为什么不简单地“follow-sibling :: td'?在某些教程中,解释是_选择当前节点之后的所有兄弟_我认为这是误导,因为当前节点是'// td [。 ='SimpleTest']'在我的理解。 –

+0

对于你的代码片段,无论你使用'// td [。 ='SimpleTest']/following-sibling :: td [1]'或'// td [。 ='SimpleTest']/following-sibling :: td [1]',因为// td [后面只有一个兄弟姐妹。 ='SimpleTest']'。但是,因为你已经用你的'如何定位这个'来识别单个'td',所以我认为在'follow-sibling :: td'轴步骤中使用'[1]'谓词更安全,因为这样可以识别即使有更多单元格的表单单元也是如此。这实际上取决于投入和需求的复杂性。 –

+0

找到更好的教程。你显然在寻找更严格的东西,而你正在阅读的东西是试图让事情变得简单。 –

0

您的XPath扩展到

/descendant-or-self::node()/following-sibling::td[text()='SimpleTest'] 

基本上你所创建的集文档中的所有元素td包含在一个复杂的方式文本SimpleTest的的。