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

如何使用PHP将XML中<Quantity>元素移动到对应<WarehouseLine>节点内

问题原因
  • 原代码仅读取了第一个<WarehouseHeader>下的第一个<Quantity>值作为全局变量,没有遍历所有<Quantity>节点
  • 原代码仅对每个<WarehouseHeader>下的第一个<WarehouseLine>添加子节点,没有处理一个Header下存在多个Line的情况
  • 没有删除原有<Quantity>节点,导致原始节点残留
解决代码
$xml = simplexml_load_string($output);
// 定位所有WarehouseHeader下的Quantity节点
$quantities = $xml->xpath('//WarehouseHeader/Quantity');

foreach ($quantities as $qtyNode) {
    // 转为DOM节点操作,获取紧邻的下一个兄弟元素
    $domQty = dom_import_simplexml($qtyNode);
    $nextSibling = $domQty->nextSibling;
    // 跳过XML默认的空白文本节点,找到目标WarehouseLine
    while ($nextSibling && $nextSibling->nodeType != XML_ELEMENT_NODE) {
        $nextSibling = $nextSibling->nextSibling;
    }
    if ($nextSibling && $nextSibling->tagName == 'WarehouseLine') {
        // 转回SimpleXML节点添加Quantity子节点
        $lineNode = simplexml_import_dom($nextSibling);
        $lineNode->addChild('Quantity', (string)$qtyNode);
        // 删除原有Quantity节点
        $domQty->parentNode->removeChild($domQty);
    }
}

echo $xml->asXML();
代码说明
  • 用XPath语法//WarehouseHeader/Quantity直接匹配所有符合要求的Quantity节点,避免嵌套遍历遗漏
  • 兼容XML结构中可能存在的空白文本节点,确保准确找到Quantity后面紧邻的WarehouseLine节点
  • 添加完子节点后直接删除原有Quantity节点,完全符合输出要求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 21:36:04