如何在同一级别的节点中获取具有特定条件的节点

时间:2016-04-20 19:38:50

标签: xml xpath nodes

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="/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="icon icon-edit" and text()='Edit'])获取“编辑”元素(//a[@class="user active" and text()="Kay Kay"])?

2 个答案:

答案 0 :(得分:1)

问:获取特定用户的“编辑”按钮 我认为应该是:

//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表达式中添加了一个点(.)。

答案 1 :(得分: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']