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

PHP实现XML重复内容合并:合并重复product节点并累加库存

PHP合并XML重复product节点解决方案

以下是实现你需求的PHP代码,核心逻辑是按SKU_parent分组节点,对SKU2的重复节点累加库存字段,其余节点保持原样:

<?php
// 加载原始XML文件,替换为你的实际文件路径
$originalXml = simplexml_load_file('source.xml');
if (!$originalXml) {
    die('加载XML文件失败,请检查路径或文件格式');
}

// 存储分组后的产品数据,键为SKU_parent
$groupedProducts = [];

// 遍历所有product节点
foreach ($originalXml->product as $product) {
    $skuParent = (string)$product->SKU_parent;

    // 处理SKU_parent为SKU2的重复节点
    if ($skuParent === 'SKU2') {
        if (isset($groupedProducts[$skuParent])) {
            // 累加KHO1、KHO2、KHO3的数值
            $groupedProducts[$skuParent]->KHO1 += (int)$product->KHO1;
            $groupedProducts[$skuParent]->KHO2 += (int)$product->KHO2;
            $groupedProducts[$skuParent]->KHO3 += (int)$product->KHO3;
        } else {
            // 首次创建该SKU的节点副本
            $groupedProducts[$skuParent] = new SimpleXMLElement('<product/>');
            // 复制所有子节点
            foreach ($product->children() as $child) {
                $groupedProducts[$skuParent]->addChild($child->getName(), (string)$child);
            }
            // 转换库存字段为整数,防止字符串拼接
            $groupedProducts[$skuParent]->KHO1 = (int)$groupedProducts[$skuParent]->KHO1;
            $groupedProducts[$skuParent]->KHO2 = (int)$groupedProducts[$skuParent]->KHO2;
            $groupedProducts[$skuParent]->KHO3 = (int)$groupedProducts[$skuParent]->KHO3;
        }
    } else {
        // 非SKU2的节点直接保留
        $groupedProducts[] = $product;
    }
}

// 创建新的XML根节点,需与原始XML根节点一致(这里假设根节点是<products>)
$newXml = new SimpleXMLElement('<products/>');

// 将处理后的节点写入新XML
foreach ($groupedProducts as $item) {
    $domNode = dom_import_simplexml($item);
    $importedNode = $newXml->domImportNode($domNode, true);
    $newXml->appendChild($importedNode);
}

// 格式化XML输出,增加可读性
$domDocument = dom_import_simplexml($newXml)->ownerDocument;
$domDocument->formatOutput = true;

// 保存处理后的XML到文件,替换为你的目标路径
file_put_contents('processed.xml', $domDocument->saveXML());
// 如需直接输出,可替换为:echo $domDocument->saveXML();
?>

使用说明

  1. 替换代码中的source.xml和processed.xml为你的实际文件路径
  2. 如果原始XML的根节点不是<products>,修改new SimpleXMLElement('<products/>')为对应根节点名称
  3. 代码默认假设重复的SKU2节点中,除KHO1/KHO2/KHO3外的字段完全一致;若存在不一致,可调整逻辑(比如保留第一个节点的字段值)

内容的提问来源于stack exchange,提问作者Phan Vũ

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 22:25:41