使用XPath,如何仅选择链接同级元素下具有特定子项的链接

时间:2017-04-21 22:42:08

标签: php xpath domxpath

如何使用以下条件仅选择中间安装名称?

在表格中,我有多个表格行。这些表行内部是一个链接(在< td>内部),其中包含特定安装的URL和名称,可以通过以下方式轻松选择:

//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>

如何使用上述条件仅选择中间安装名称?

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

一起使用的CodePen

2 个答案:

答案 0 :(得分:2)

您可以将第二个XPath用作第一个XPath的附加谓词([]中的表达式),如下所示:

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

<强> xpath demo

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

答案 1 :(得分:1)

如何向后遍历HTML。

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