есть вот такое парсер (переделыватель) xml файла. Однако есть загвоздка, проходя по исходному xml он игнорирует категории 3 вложенности. скажите как подправить. сам в php не рублю, но что-то подсказывает что не очень сложно.
<?
// ГЛОБАЛЬНЫЕ ПУТИ ---------
//$zip_path_orig = $_SERVER['DOCUMENT_ROOT']."/catalog";
$zip_path = $_SERVER['DOCUMENT_ROOT']."/upload";
$zip_name = "catalog.zip";
$xml_path = $_SERVER['DOCUMENT_ROOT']."/upload";
$xml_name_in = "catalog.xml";
$xml_name_out = "elsis.xml";
//echo "xml_path=".$xml_path;
// -------------------------
// переместить из корня в upload
//rename($zip_path_orig."/".$zip_name,$zip_path.'/catalog.zip');
//Создаём объект для работы с ZIP-архивами
$zip = new ZipArchive();
if ($zip->open($zip_path."/".$zip_name) === true)
{
$zip->extractTo($xml_path); //Извлекаем файлы в указанную директорию
$zip->close(); //Завершаем работу с архивом
// переименовываем zip-архив для истории
rename($zip_path."/".$zip_name,$zip_path.'/catalog_'.date("Y-m-d_H-i").'.zip');
// Доп. проверка на отсутствие catalog.zip в папке, если есть - удалить
if (is_file($zip_path."/".$zip_name))
{
unlink($zip_path."/".$zip_name);
}
// загружаем xml в переменную
$oXML = simplexml_load_file($xml_path."/".$xml_name_in);
if($oXML->Документ)
$obXML = $oXML->Документ;
if($obXML->Группа)
{
$fp = fopen($xml_path."/".$xml_name_out, 'w'); // Открываем файл с перезаписью старого
$s0 = "<Файл xsi=\"http://www.w3.org/2001/XMLSchema-instance\" noNamespaceSchemaLocation=\"NO_EDUPR_1_083_00_04_01_02.xsd\">";
$s0.= "<Предприятие>ООО Триатрон</Предприятие><Название>Каталог товаров</Название>";
$s0.= "<Документ>";
$s1 = "<Номенклатура ";
foreach($obXML->Группа as $group)
{
// echo "<br>Группа:<br>";
$s2 = "";
foreach($group->attributes() as $name => $value)
{
// echo $name."=".$value."<br>";
if($name == "Название")
$name = "НазваниеГруппы";
$value = trim(htmlspecialchars(preg_replace('/ {2,}/',' ',$value)));
$s2.= $name."=\"".$value."\" ";
// if($name == "КодГруппы")
// $s2.= "imageG=\"sections/img/".(int)$value.".jpg\" ";
}
$s3 = "КодПодГруппы=\"\" НазваниеПодГруппы=\"\" ";
foreach($group->Номенклатура as $item)
{
$s4 = "";
// echo "<br>Номенклатура:<br>";
foreach($item->attributes() as $name => $value)
{
// echo $name."=".$value."<br>";
if($name != "Характеристики" && $name != "КодКонтрагента")
{
$value = trim(htmlspecialchars(preg_replace('/ {2,}/',' ',$value)));
if($name == "Наличие" && (strpos($value, '.') !== false || strpos($value, 'недел') !== false))
{
$value = 0;
}
if ($value == 0)
{
// 3-4 недели
$s11 = "Статус=\"9\" ";
}
else
{
// В наличии
$s11 = "Статус=\"7\" ";
}
if($name == "Артикул")
{
$s4.= "imageArt=\"data/elements/img/".$value.".jpg\" ";
// $s4.= "pdfArt=\"elements/pdf/".$value.".pdf\" ";
}
$s4.= $name."=\"".$value."\" ";
}
}
$s0.= $s1 . $s2 . $s3 . $s4 . "/>";
}
foreach($group->Группа as $podgroup)
{
$s3 = "";
// echo "<br>Подгруппа:<br>";
foreach($podgroup->attributes() as $name => $value)
{
// echo $name."=".$value."<br>";
if($name == "Название")
$name = "НазваниеПодГруппы";
$value = trim(htmlspecialchars(preg_replace('/ {2,}/',' ',$value)));
if($name == "КодГруппы")
{
$name = "КодПодГруппы";
// $s3.= "imagePG=\"sections/img/".(int)$value.".jpg\" ";
}
$s3.= $name."=\"".$value."\" ";
}
foreach($podgroup->Номенклатура as $item)
{
$s4 = "";
// echo "<br>Номенклатура:<br>";
foreach($item->attributes() as $name => $value)
{
// echo $name."=".$value."<br>";
if($name != "Характеристики" && $name != "КодКонтрагента")
{
$value = trim(htmlspecialchars(preg_replace('/ {2,}/',' ',$value)));
if($name == "Наличие" && (strpos($value, '.') !== false || strpos($value, 'недел') !== false))
{
$value = 0;
}
if ($value == 0)
{
// 3-4 недели
$s11 = "Статус=\"9\" ";
}
else
{
// В наличии
$s11 = "Статус=\"7\" ";
}
if($name == "Артикул")
{
$s4.= "imageArt=\"data/elements/img/".$value.".jpg\" ";
// $s4.= "pdfArt=\"elements/pdf/".$value.".pdf\" ";
}
$s4.= $name."=\"".$value."\" ";
}
}
$s0.= $s1 . $s11 . $s2 . $s3 . $s4 . "/>";
}
}
}
$s0 .= "</Документ></Файл>";
$test = fwrite($fp, $s0); // Запись в файл
// if ($test) echo 'Данные в файл успешно занесены.';
// else echo 'Ошибка при записи в файл.';
fclose($fp); //Закрытие файла
}
// удаляем извлеченный xml-файл за ненадобностью
unlink($xml_path."/".$xml_name_in);
}
// else echo "Архива не существует!"; //Выводим уведомление об ошибке
?>
входной файл:
<Файл xsi="http://www.w3.org/2001/XMLSchema-instance" noNamespaceSchemaLocation="NO_EDUPR_1_083_00_04_01_02.xsd">
<Предприятие>ООО Триатрон</Предприятие>
<Название>Каталог товаров</Название>
<ДатаВыгрузки>15.10.17</ДатаВыгрузки>
<Документ>
<Группа Название="NXP, ST, VISHAY" КодГруппы="00006486">
<Группа Название="NXP" КодГруппы="00006450">
<Номенклатура Артикул="18231 " Наименование="74HC164D SO14-150 NXP микросхема" ЦенаРозничная="5.53" НормоУпаковка="2500" Производитель="NXP" Характеристики="74HC164D,653 " Наличие="7500" КодКонтрагента="0"/>
<Номенклатура Артикул="01839 " Наименование="BAS16 (30mA/75В) SOT23 SMD (лента) диодная сборка MIC" ЦенаРозничная="0.89" НормоУпаковка="3000" Производитель="MIC" Характеристики=" " Наличие="45000" КодКонтрагента="0"/>
<Номенклатура Артикул="01840 " Наименование="BAS21/T1 SOT23 диодная сборка NXP" ЦенаРозничная="0.63" НормоУпаковка="3000" Производитель="YANGJIE" Характеристики="BAS21 " Наличие="132000" КодКонтрагента="0"/>
выходной:
<Файл xsi="http://www.w3.org/2001/XMLSchema-instance" noNamespaceSchemaLocation="NO_EDUPR_1_083_00_04_01_02.xsd">
<Предприятие>ООО Триатрон</Предприятие>
<Название>Каталог товаров</Название>
<Документ>
<Номенклатура Статус="7" НазваниеГруппы="NXP, ST, VISHAY" КодГруппы="00006486" НазваниеПодГруппы="NXP" КодПодГруппы="00006450" imageArt="data/elements/img/18231.jpg" Артикул="18231" Наименование="74HC164D SO14-150 NXP микросхема" ЦенаРозничная="5.53" НормоУпаковка="2500" Производитель="NXP" Наличие="7500"/>
<Номенклатура Статус="7" НазваниеГруппы="NXP, ST, VISHAY" КодГруппы="00006486" НазваниеПодГруппы="NXP" КодПодГруппы="00006450" imageArt="data/elements/img/01839.jpg" Артикул="01839" Наименование="BAS16 (30mA/75В) SOT23 SMD (лента) диодная сборка MIC" ЦенаРозничная="0.89" НормоУпаковка="3000" Производитель="MIC" Наличие="45000"/>
<Номенклатура Статус="7" НазваниеГруппы="NXP, ST, VISHAY" КодГруппы="00006486" НазваниеПодГруппы="NXP" КодПодГруппы="00006450" imageArt="data/elements/img/01840.jpg" Артикул="01840" Наименование="BAS21/T1 SOT23 диодная сборка NXP" ЦенаРозничная="0.63" НормоУпаковка="3000" Производитель="YANGJIE" Наличие="132000"/>
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Использую PHP 56, все необходимые для работы драйвера скачал, пытаюсь выполнить следующий код
Такой код работает и создаёт задачу, но стоит мне увеличить длину строки text, к примеру вместо /tn abc написать /tn abcd, программа вылетает на функции...