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

PHP中使用XPath将HTML无序列表转换为多维数组的实现方法

PHP DOMXPath 提取物流结构化数据实现方案

以下是可直接运行的调整后代码,可自动拆分status/data/hora等字段生成目标多维数组:

<?php
// 此处替换为你的实际HTML内容
$sourceHtml = '你的HTML代码片段';

// 初始化DOM解析器,屏蔽非标准HTML的警告提示
$dom = new DOMDocument();
libxml_use_internal_errors(true);
// 解决中文乱码问题
$dom->loadHTML('<?xml encoding="UTF-8">' . $sourceHtml);
libxml_clear_errors();

$xpath = new DOMXPath($dom);
$logisticsData = [];

// 第一步:查询所有class包含linha_status的ul节点
$eventUlList = $xpath->query('//ul[contains(@class, "linha_status")]');

foreach ($eventUlList as $ulNode) {
    $eventItem = [];
    // 第二步:查询当前ul下的所有li节点
    $liList = $xpath->query('./li', $ulNode);
    
    foreach ($liList as $liNode) {
        $liText = trim($liNode->nodeValue);
        // 按冒号拆分键值对,第二个参数限制仅拆分一次,避免值内包含冒号导致拆分错误
        $splitRes = explode(':', $liText, 2);
        if (count($splitRes) === 2) {
            // 统一键名小写,可按需修改为你需要的键名映射规则
            $key = strtolower(trim($splitRes[0]));
            $eventItem[$key] = trim($splitRes[1]);
        }
    }
    
    $logisticsData[] = $eventItem;
}

// 输出结构化结果
print_r($logisticsData);
?>

适配特殊场景说明

  • 如果你的li标签自带对应字段的class属性(比如<li class="status">已揽收</li>),可以直接替换li查询逻辑,不用拆分文本,稳定性更高:
    // 示例:直接按class取对应字段值
    $eventItem['status'] = trim($xpath->query('./li[contains(@class, "status")]', $ulNode)->item(0)?->nodeValue ?? '');
    $eventItem['data'] = trim($xpath->query('./li[contains(@class, "data")]', $ulNode)->item(0)?->nodeValue ?? '');
    
  • 代码默认键名是li内冒号前的文本转小写,如果你需要自定义键名映射,可以增加映射数组处理:
    $keyMap = [
        '状态' => 'status',
        '日期' => 'data',
        '时间' => 'hora'
    ];
    $key = $keyMap[trim($splitRes[0])] ?? strtolower(trim($splitRes[0]));
    

运行后生成的数组结构示例:

Array
(
    [0] => Array
        (
            [status] => 包裹已出库
            [data] => 2024-06-10
            [hora] => 16:42
            [origem] => 杭州仓储中心
        )
    [1] => Array
        (
            [status] => 运输中
            [data] => 2024-06-11
            [hora] => 08:25
            [destino] => 上海闵行配送站
        )
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 17:36:04