Я должен решить эту проблему с помощью PHP и DomDocument (также может подойти simplexml). Я много гуглил, но не нашел подходящего примера, чтобы узнать, как это сделать:
У меня есть следующий XML-код eBay
<?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();
Когда вы говорите удалить узел, можете ли вы привести пример того, что вы хотите удалить.
Количество: Я сделал это, но не работает: `$ Q = $ is-> getElementsByTagName (" Quantity "); $ Q-> parentNode-> removeChild ($ Q); `
$is - это DOMNodeList, если вы хотите его использовать, то, как и при вызове cloneNode(), вам нужно использовать $is[0]Понятно ... Я провел много тестов и уверен, что поставил [0] во многих местах ... и я уверен, что также в этой точке ... но поскольку я проверил еще раз ... в этом случае ошибка в последнем инструкция: $Q->parentNode->removeChild($Q);
Хорошо .. Я проведу еще несколько тестов. Большое спасибо: теперь, по крайней мере, знайте, что эта инструкция верна! Поскольку я не хочу удалять из $ dom, но из клонированного $, это потому, что у одного узла будет количество, а у другого - нет. поскольку я удалил другой узел, но на этот раз из $ dom: с помощью следующих инструкций: $ SKU = $ xml-> getElementsByTagName ("SKU") -> item (0); $ SKU-> parentNode-> removeChild ($ SKU);
Вау! Так просто :-( Хорошо, я также смог изменить значения для всех дочерних узлов всех клонированных узлов, а также удалить узел из dom и использовать insertbefore, НО не удалось удалить узел из $ is .. могу я задаю вам также этот вопрос Спасибо