Этот код дает неэффективные результаты, когда я использую его для анализа большого файла XML.
Анализируемый XML выглядит следующим образом:
<product>
<ItemId>1576829</ItemId>
<modelNumber>CX501</modelNumber>
<categoryPath><category><name>Buy</name></category>
<category><name>Car, Marine & GPS</name></category>
<category><name>Car Audio</name></category>
<category><name>Car Stereos</name></category>
<category><name>CD Decks</name></category></categoryPath>
</product>
Существует около 100 наборовproduct (так, в основном, выше xml умножить на 100)
Этот код работает, когда есть только 3-5 комплектов товара, но не когда он увеличивается в размере.Почему он не работает для больших файлов?
<?php
set_time_limit(0);
// load up your XML
$xml = new DOMDocument;
$xml->load('file.xml');
// Array to store them
$append = array();
foreach ($xml->getElementsByTagName('product') as $product )
{
foreach($product->getElementsByTagName('name') as $name ) {
// Stick $name onto the array
$append[] = $name;
}
// Now append all of them to product
foreach ($append as $a)
{
$product->appendChild($a);
}
$product->removeChild($xml->getElementsByTagName('categoryPath')->item(0));
}
// final result:
$result = $xml->saveXML();
echo $result;
$file = "new_file.xml";
file_put_contents($file,$result);
?>
После выполнения этого кода файл XML должен выглядеть так для каждого набора продуктов
<?xml version='1.0'?>
<products>
<product>
<ItemId>531670</ItemId>
<modelNumber>METRA ELECTRONICS/MOBILE AUDIO</modelNumber>
<name>Buy</name></category>
<name>Car, Marine & GPS</name>
<name>Car Installation Parts</name>
<name>Deck Installation Parts</name>
<name>Antennas & Adapters</name>
</product>
</products>
Однако, когдаЯ использую этот PHP-код для анализа довольно большого XML-файла (один со 100 наборами продуктов), он берет узел categoryPath и его дочерние элементы и добавляет их в конец файла, не учитывая узел, в котором он должен находиться (product)Если я проанализирую только небольшой XML-файл (тот, который имеет 3 набора продукта), то я получу желаемый результат (приведенный выше XML-код - это то, что должен делать этот PHP-код, но он не работает при наличии большого файла).
Когда я пытаюсь проанализировать XML-файл, содержащий 100 наборов продуктов, результат выглядит следующим образом:
<?xml version='1.0'?>
<products>
<product>
<ItemId>531670</ItemId>
<modelNumber>METRA ELECTRONICS/MOBILE AUDIO</modelNumber>
</product>
</products>
<name>Buy</name></category>
<name>Car, Marine & GPS</name>
<name>Car Installation Parts</name>
<name>Deck Installation Parts</name>
<name>Antennas & Adapters</name>
Каждый из узлов имени не добавляется внутри узла продукта.