Я должен решить эту проблему с PHP и DomDocument (также симплекс XML может быть в порядке).
Я много гуглил, но не нашел подходящего примера, чтобы узнать, как это сделать:
У меня есть следующий 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>
и добавить только под текущим узлом
Может пожалуйста дать несколько советов
Спасибо!
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();
Других решений пока нет …