Php 使用XPath,如何仅选择在links同级元素下存在特定子元素的链接

Php 使用XPath,如何仅选择在links同级元素下存在特定子元素的链接,php,xpath,domxpath,Php,Xpath,Domxpath,如何使用以下条件仅选择中间安装名称 在一个表中,我有多个表行。这些表行的内部是一个链接(a的内部),其中包含特定安装的URL和名称,可以通过以下方式轻松选择: //td[contains(@class, 'install-name')]/a/text() 我不想选择所有安装名称,只想选择已锁定的安装。只有锁定的安装包含位于链接同级元素内部的此元素 //div[@class="install-details"]/span/i[contains(@class, 'password-protect

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


在一个表中,我有多个表行。这些表行的内部是一个链接(a的内部),其中包含特定安装的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>


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


编辑:这里有一个代码笔可以使用,您可以使用第二个XPath作为第一个XPath的附加谓词(在
[]
中的表达式),如下所示:

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


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

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

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


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

向后遍历HTML如何

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

向后遍历HTML怎么样

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

你到底想选什么?i、 e
a
td
div
?您想要选择什么?i、 e
a
td
div
?工作正常,谢谢。我不知道谓词,非常好用,谢谢。我不知道谓词。谢谢分享。我最终使用了另一个,因为它看起来更直截了当,但我不知道我能做到这一点,很高兴知道!谢谢分享。我最终使用了另一个,因为它看起来更直截了当,但我不知道我能做到这一点,很高兴知道!