首页 > 解决方案 > PHP 7.1 XML domDocument 克隆节点和子节点

问题描述

我必须用 PHP 和 DomDocument 解决这个问题(simplexml 也可以)。我用谷歌搜索了很多,但没有找到一个正确的例子来学习如何做:

我有以下 eBay XML

<?xml version="1.0" encoding="utf-8"?>
<ReviseInventoryStatusRequest xmlns="urn:ebay:apis:eBLBaseComponents">
  <RequesterCredentials>
    <eBayAuthToken>INSERT_TOKEN</eBayAuthToken>
  </RequesterCredentials>
  <InventoryStatus>
    <ItemID> ItemIDType (string) </ItemID>
    <Quantity> int </Quantity>
    <SKU> SKUType (string) </SKU>
    <StartPrice> AmountType (double) </StartPrice>
  </InventoryStatus>
  <ErrorLanguage>en-US</ErrorLanguage>
  <Version> string </Version>
  <WarningLevel>Low</WarningLevel>
</ReviseInventoryStatusRequest>

我需要克隆(实际上是 4 次)<InventoryStatus>节点及其所有子节点:

  <InventoryStatus>
    <ItemID> ItemIDType (string) </ItemID>
    <Quantity> int </Quantity>
    <SKU> SKUType (string) </SKU>
    <StartPrice> AmountType (double) </StartPrice>
  </InventoryStatus>

并在当前节点下追加

请给一些提示

谢谢!

标签: phpxmldomdocumentphp-7.1clonenode

解决方案


DOMDocument 在处理这样的事情上要好得多,并且可以只用 克隆节点cloneNode(),传递true也可以复制内容的深度克隆。然后,您可以将节点添加回您需要的位置...

$dom = new DOMDocument();
$dom->load("data.xml");

$is = $dom->getElementsByTagName("InventoryStatus");
$dom->documentElement->appendChild($is[0]->cloneNode(true));
$dom->documentElement->appendChild($is[0]->cloneNode(true));
$dom->documentElement->appendChild($is[0]->cloneNode(true));
$dom->documentElement->appendChild($is[0]->cloneNode(true));
echo $dom->saveXML();

推荐阅读