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

如何使用DOM同时获取href属性值与文本内容?

PHP DOM 同时提取
  • 文本及内部的href属性
  • 基础DOM操作实现

    直接遍历<li>元素,检查其内部是否存在<a>标签,进而提取链接属性:

    $html = '<ul><li><a href="https://example.com/page1">第一页</a></li><li><a href="https://example.com/page2">第二页</a></li><li>没有链接的项目</li></ul>';
    $dom = new DOMDocument();
    libxml_use_internal_errors(true); // 屏蔽HTML解析警告
    $dom->loadHTML($html);
    libxml_clear_errors();
    
    $liElements = $dom->getElementsByTagName('li');
    $results = [];
    
    foreach ($liElements as $li) {
        // 获取当前<li>下的第一个<a>标签
        $aTag = $li->getElementsByTagName('a')->item(0);
        
        $item = [
            'text' => trim($li->textContent), // 提取<li>的文本内容
            'href' => null
        ];
        
        // 如果存在<a>标签,提取其href属性
        if ($aTag instanceof DOMElement) {
            $item['href'] = $aTag->getAttribute('href');
        }
        
        $results[] = $item;
    }
    
    // 输出处理后的结果
    foreach ($results as $res) {
        echo "文本内容:{$res['text']} | 链接地址:{$res['href']}\n";
    }
    

    XPath 精准匹配实现

    用XPath可以更简洁地定位元素,适合结构复杂的HTML:

    $html = '<ul><li><a href="https://example.com/page1">第一页</a></li><li><a href="https://example.com/page2">第二页</a></li><li>没有链接的项目</li></ul>';
    $dom = new DOMDocument();
    libxml_use_internal_errors(true);
    $dom->loadHTML($html);
    libxml_clear_errors();
    
    $xpath = new DOMXPath($dom);
    // 选择所有<li>节点
    $liNodes = $xpath->query('//li');
    
    $results = [];
    foreach ($liNodes as $node) {
        // 提取<li>的文本
        $text = trim($node->textContent);
        // 提取<li>内部<a>的href属性,无则返回空字符串
        $href = $xpath->evaluate('string(.//a/@href)', $node);
        
        $results[] = [
            'text' => $text,
            'href' => $href ?: null
        ];
    }
    
    // 输出结果
    foreach ($results as $res) {
        echo "文本内容:{$res['text']} | 链接地址:{$res['href']}\n";
    }
    

    说明

    • 两种方法都兼容<li>内部有无<a>标签的情况
    • libxml_use_internal_errors(true)用来屏蔽DOM解析HTML时的警告(比如非标准HTML结构)
    • 提取结果以数组形式存储,方便后续业务处理(如存入数据库、生成JSON等)

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

    相关产品推荐
    方舟 Agent Plan

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

    最近更新时间:2026.08.03 09:41:33