2017-04-21 34 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

感謝分享。我結束了使用另一個,因爲它似乎更直接一點,但我不知道我可以做到這一點,很高興知道! –

相關問題