2017-04-21 37 views
0

如何使用以下条件仅选择中间安装名称?如何使用XPath,如何仅选择链接中具有特定子项的链接?兄弟元素


在表格中,我有多个表格行。里面这些表中的行是包含特定的网址和名称安装,可以很容易地选择一个链接(< TD >内):

//td[contains(@class, 'install-name')]/a/text() 

而是选择所有安装的名字,我只想选择被锁定的安装。只有锁定的安装包含位于链接兄弟元素内的此元素。

//div[@class="install-details"]/span/i[contains(@class, 'password-protected')] 

下面是HTML:

<tr class="install odd" role="row"> 
    <td class="install-name sorting_1" data-sort="demo"><a href="/installs/demo">demo</a> 
     <div class="install-details"> 
     <span> 

     </span> 
     <span class="php-version"> 

     </span> 
     </div> 
    </td> 
</tr> 
<tr class="install even" role="row"> 
    <td class="install-name sorting_1" data-sort="adam"> 
     <a href="/installs/adam">adam</a> 
     <div class="install-details"> 
      <span> 
       <i class="install-status-icon password-protected fa fa-lock" title="Password Protected"></i> 
      </span> 
      <span class="php-version"> 

      </span> 
     </div> 
    </td> 
</tr> 
<tr class="install odd" role="row"> 
    <td class="install-name sorting_1" data-sort="amy"> 
     <a href="/installs/amy">amy</a> 
     <div class="install-details"> 
       <span> 

       </span> 
       <span class="php-version"> 

       </span> 
     </div> 
    </td> 
</tr> 

如何选择只有中间用上述标准安装的名字吗?

编辑:这是一个CodePen与https://codepen.io/anon/pen/QvEbba

+0

你想要什么精确选择?即'a','td'或'div'? – SaidbakR

回答

2

发挥您可以使用您的第二个XPath作为一个额外的谓词(在[]表达)到您的第一个XPath如下:

//td[contains(@class, 'install-name')] 
    [div[@class="install-details"]/span/i[contains(@class, 'password-protected')]] 
/a/text() 

xpath demo

注意第二个谓词应该将结果限制为那些td其中包含'受密码保护'的信息。

+0

工作完美,谢谢。我不知道谓词。 –

1

如何向后遍历HTML。

//i[contains(@class, 'password-protected')]/parent::span/parent::div[@class='install-details']/preceding-sibling::a/text() 
+0

感谢分享。我结束了使用另一个,因为它似乎更直接一点,但我不知道我可以做到这一点,很高兴知道! –

相关问题