You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP如何从每个HTML列表项中获取子元素

在PHP中对单个DOM列表项(LI)执行XPath查询

你不需要转换$LIList->item($LI)的格式,直接将它作为上下文节点传入DOMXPath的query()方法即可。DOMXPath的query()方法支持第二个参数,用于指定查询的上下文范围,这样就能在单个LI元素内部执行XPath查询。

修改后的代码示例

$xpath = new DomXPath($doc);
....
// 获取所有class为mw-contributions-list的UL列表
$ULList = $xpath->query("//ul[@class='mw-contributions-list']");
// 遍历每个UL列表
for ($UL = 0; $UL < $ULList->length; $UL++) 
{
    // 获取当前UL下的所有LI元素
    $LIList = $ULList->item($UL)->getElementsByTagName("li");
    // 遍历每个LI元素
    for ($LI = 0; $LI < $LIList->length; $LI++) 
    {
        $currentLI = $LIList->item($LI);
        // 以当前LI为上下文节点,查询内部所有锚点链接
        $anchorLinks = $xpath->query(".//a", $currentLI);
        
        // 遍历获取到的锚点链接,提取信息
        for ($a = 0; $a < $anchorLinks->length; $a++) {
            $link = $anchorLinks->item($a);
            $linkText = $link->nodeValue;  // 获取链接文本
            $linkHref = $link->getAttribute("href");  // 获取链接地址
            // 此处添加你的后续处理逻辑
        }
        ....
    }
}

关键说明

  • 上下文节点参数:query()的第二个参数限定了查询范围,只会在传入的$currentLI元素内部查找匹配节点,避免全局查询干扰。
  • XPath表达式中的.:表示从当前上下文节点开始查找,比如.//a会匹配当前LI下所有层级的<a>元素,而非整个文档中的链接。

内容的提问来源于stack exchange,提问作者Cotta1000

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 08:49:59