Добрый день!
Имеется xml-файл с товарами (более 300 тыс строк, размером в 40Мб). Нужно этот файл спарсить и залить данные в БД OpenCart.
Делал парсинг с помощью кода
$properties = $products->getElementsByTagName("Property"); // Получаем список всеx атрибутов
$attributes = array(); // создаем пустой массив атрибутов
$i = 0;
foreach ($properties as $node) {
$attributes[$i]['id'] = $node->getAttribute('ID');
$attributes[$i]['name'] = $node->getAttribute('Name');
$attributes[$i]['sort_order'] = $node->getAttribute('Sort');
$attributes[$i]['articul'] = $node->parentNode->parentNode->parentNode->getAttribute('Articul');
$i++;
}
Все хорошо обрабатывается, есть возможность заполучить значение Артикул у родительского элемента
$attributes[$i]['articul'] = $node->parentNode->parentNode->parentNode->getAttribute('Articul');
Но вот с большим объемом данных этот скрипт зависает на полчаса... что очень плохо
Нашел в Интернете пример работы SimpleXMLReader. Сделал вывод им, так он шустро обработал данные в течении нескольких секунд. Ниже частично приведен его код
class ExampleXmlReader1 extends SimpleXMLReader
{
public function __construct() {
// by node name
$this->registerCallback("Property", array($this, "callbackAttributes"));
}
protected function callbackAttributes($reader) {
$xml = $reader->expandSimpleXml();
$attributes = $xml->attributes();
$ref = (string) $attributes->{"ID"};
if ($ref) {
$name = (string) $attributes->{"Name"};
$sort = (int) $attributes->{"Sort"};
echo "$ref: $name - $sort;\n";
}
return true;
}
}
Но вот незадача, никак не могу найти пример обращения к родительским узлам и их атрибутам... Мне нужно заполучить Артикул товара, но как это сделать - ума не приложу. Помогите, пожалуйста.