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

PHP使用simplexml_load_string解析PrestaShop XML生成指定键值数组

PrestaShop API XML 解析实现方案

直接用simplexml_load_string配合LIBXML_NOCDATA参数即可快速完成解析,不需要额外做复杂的数组转换,核心逻辑如下:

单条分类数据解析

针对给出的单category节点结构,直接读取节点值组装数组即可:

// 传入XML字符串加载,LIBXML_NOCDATA会自动将CDATA内容解析为普通文本节点
$xml = simplexml_load_string($responseXml, 'SimpleXMLElement', LIBXML_NOCDATA);

$result = [];
// 读取分类ID,强转字符串避免SimpleXMLElement对象类型问题
$catId = trim((string)$xml->category->id);
// 读取分类名称,默认取第一个language节点的内容
$catName = trim((string)$xml->category->name->language);

$result[$catId] = $catName;

运行后$result的结构就是需要的['2' => 'Home']格式。

分类列表批量解析

如果是分类列表接口,返回的XML会包含多个同级category节点,循环处理即可:

$xml = simplexml_load_string($responseXml, 'SimpleXMLElement', LIBXML_NOCDATA);
$result = [];

foreach ($xml->category as $categoryNode) {
    $catId = trim((string)$categoryNode->id);
    $catName = trim((string)$categoryNode->name->language);
    $result[$catId] = $catName;
}

多语言场景适配

如果店铺开启了多语言,name节点下会有多个不同id的language节点,需要按语言维度存储名称时可以用以下逻辑:

$xml = simplexml_load_string($responseXml, 'SimpleXMLElement', LIBXML_NOCDATA);
$result = [];

foreach ($xml->category as $categoryNode) {
    $catId = trim((string)$categoryNode->id);
    $langNameMap = [];
    // 遍历所有语言节点
    foreach ($categoryNode->name->language as $langNode) {
        $langId = (string)$langNode['id'];
        $langNameMap[$langId] = trim((string)$langNode);
    }
    $result[$catId] = $langNameMap;
}

注意点

  • 必须加LIBXML_NOCDATA参数,否则CDATA包裹的内容需要通过额外调用children()方法读取,增加冗余代码
  • 取值时统一强转string类型,避免直接存入SimpleXMLElement对象导致后续使用报错
  • 不需要额外处理xlink命名空间,读取普通节点内容和常规属性时不会受命名空间影响

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 14:27:15