PHP DOM. Парсинг нескольких xml файлов при помощи DOM и объединение спарсенных данных
У поставщика есть несколько xml файлов с параметрами товаров: основная информация, остатки и категории
У меня получилось распарсить каждый файл, но объединить данные не могу. После парсинга, данные записываются в базу.
Делаю так: под каждый файл написан класс, внутри каждого класса хранится метод с парсингом файла.
Урезанный пример кода:
class PRODUCT{
public function products($xmlPrice){
$dom = new DOMDocument;
$dom -> load($xmlPrice);
foreach($dom -> documentElement -> childNodes as $product){
if($product -> nodeType == 1 && $product -> nodeName == 'product_id'){
$productId = $product -> textContent;
}
if($product -> nodeType == 1 && $product -> nodeName == 'description'){
$description = $product -> textContent;
}
}
}
}
$product = new PRODUCT;
$product -> products($xmlPrice);
class STOCK{
public function stocks($xmlStock){
$domStock = new DOMDocument;
$domStock -> load($xmlStock);
foreach($domStock -> documentElement -> childNodes as $stock){
if($stock -> nodeType == 1 && $product -> nodeName == 'product_id'){
$stockProductId = $stock -> textContent;
}
if($stock -> nodeType == 1 && $stock -> nodeName == 'quantity'){
$stockQuantity = $stock -> textContent;
}
}
}
}
$stock = new STOCK;
$stock -> stocks($xmlStock);
//Примерный вывод должен быть в виде: $productId: $description: $stockQuantity ;
Никак не пойму, как сравнить product_id из первого класса с $stockProductId и вывести $quantity вместе с основной информацией о товаре.
С другими выгрузками от поставщиков такой проблемы не было, они выгружают всю информацию в 1 xml, и там совсем несложно оперировать данными.
Ответы (1 шт):
Пришла к следующему решению:
В указанных классах собрала данные в массивы, затем объявила переменные массива как глобальные, после вызова классов объединила их в один общий массив. После этого, общий массив $arrayAll[] можно разобрать как обычный многомерный массив
class PRODUCT{
public function products($xmlPrice){
$dom = new DOMDocument;
$dom -> load($xmlPrice);
foreach($dom -> documentElement -> childNodes as $product){
if($product -> nodeType == 1 && $product -> nodeName == 'product_id'){
$productId = $product -> textContent;
}
if($product -> nodeType == 1 && $product -> nodeName == 'description'){
$description = $product -> textContent;
}
$arrayProducts[] = array(
'productId' => $productId,
'description' => $description
);
global $arrayProducts;
}
}
}
$product = new PRODUCT;
$product -> products($xmlPrice);
class STOCK{
public function stocks($xmlStock){
$domStock = new DOMDocument;
$domStock -> load($xmlStock);
foreach($domStock -> documentElement -> childNodes as $stock){
if($stock -> nodeType == 1 && $product -> nodeName == 'product_id'){
$stockProductId = $stock -> textContent;
}
if($stock -> nodeType == 1 && $stock -> nodeName == 'quantity'){
$stockQuantity = $stock -> textContent;
}
$arrayStock[] = array(
'stockProductId' => $stockProductId,
'stockQuantity' => $stockQuantity
);
global $arrayStock;
}
}
}
$stock = new STOCK;
$stock -> stocks($xmlStock);
$arrayAll[] = array(
'arrayProducts' => $arrayProducts,
'arrayStock' => $arrayStock
);