2016-04-20 23 views
0

XML是:如何獲得與特定的條件節點中的節點在同一水平上

<table class="list members"> 
    <thead> 
    <tbody> 
     <tr id="member-141568" class="odd member"> 
     <td class="name user"> 
      <td class="roles"> 
      <td class="buttons"> 
     </tr> 
     <tr id="member-141576" class="even member"> 
     <td class="name user"> 
      <td class="roles"> 
      <td class="buttons"> 
     </tr> 
     <tr id="member-141573" class="odd member"> 
     <td class="name user"> 
      <a class="user active" href="https://stackoverflow.com/users/144550">Kay Kay</a> 
     </td> 
     <td class="roles"> 
      <td class="buttons"> 
      <a class="icon icon-edit" onclick="$('#member-141573-roles').hide(); $('#member-141573-roles-form').show(); return false;; return false;" href="#">Edit</a> 
      <a class="icon icon-del" href="/memberships/141573" data-method="delete" rel="nofollow" data-remote="true">Delete</a> 
      </td> 
     </tr> 
    </tbody> 
</table> 

主要的想法是讓編輯按鈕在現場列表特定用戶。 那麼如何爲特定用戶(//a[@class="user active" and text()="Kay Kay"])獲取「編輯」元素(//a[@class="icon icon-edit" and text()='Edit'])?

回答

1

問:獲取Edit按鈕針對特定用戶 我覺得應該是:

//tr[.//a[@class='user active' and text()='Kay Kay']]//a[@class='icon icon-edit' and text()='Edit'] 

查找與用戶的TR:

//tr[.//a[@class='user active' and text()='Kay Kay']] 

和編輯按鈕這個TR內:

//a[@class='icon icon-edit' and text()='Edit'] 

更新:

感謝har07第一個正確答案我在上面的tr表達式中加了一個點(.)。

+0

完美! 它的工作原理!非常感謝! –

1

要兩個表達式結合起來,你會需要先找到一個最近的共同祖先,在這種情況下,tr元素:

//tr[.//a[@class='user active' and text()='Kay Kay']] 

以上應該找到包含某些用戶tr元素。請注意,在謂詞表達式中的/之前的.需要使其相對於當前的tr上下文。此外,由於a嵌套不太深,我建議使用完整路徑。這將使中的XPath 有點更有效,同時保持大約同樣簡潔的表達:

//tr[td/a[@class='user active' and text()='Kay Kay']] 

然後,從這個tr,繼續路徑使用你的第二的XPath返回目標元素:

//a[@class="user active" and text()="Kay Kay"] 

以下將是我將使用此任務的整個的XPath:

//tr[td/a[@class="user active" and .="Kay Kay"]]//a[@class='icon icon-edit' and .='Edit'] 
+0

它幫助!非常感謝你! –

相關問題