PHP 7.1 XML узел клона domDocument с подузлами - PullRequest
0 голосов
/ 20 декабря 2018

Я должен решить эту проблему с помощью 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>

и добавление только под текущим Узлом

Может, пожалуйста, дать несколько подсказок

Спасибо!

1 Ответ

0 голосов
/ 20 декабря 2018

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();
...