Evanre
@Evanre
Front-end developer

Как конвертировать один XML в другой?

Есть задача: импортировать товары в Opencart из XML посредством расширения.
Проблема в том, что формат файла который просит расширение OpenCart'a не совпадает с тем, который генерит бух.прога заказчика. По неизвестным причинам, заказчик не может изменить формат генерируемого файла.
Было решено написать небольшой конвертер на PHP который бы принимал файл заказчика и генерировал файл, который расширение сможет корректно прочитать.
И так. Есть входящий XML со списком товаров такого вида:
spoiler
<?xml version="1.0" encoding="UTF-8"?>
<SHOP>
<SHOPITEM>
    <NAME>Product 1</NAME>
    <PRODUCT_ID/>
    <Quantity>5</Quantity>
    <MODEL>Product 1 Model</MODEL>
    <SKU>302942275</SKU>
    <SIZE>XL</SIZE>
</SHOPITEM>
<SHOPITEM>
    <NAME>Product 1</NAME>
    <PRODUCT_ID/>
    <Quantity>6</Quantity>
    <MODEL>Product 1 Model</MODEL>
    <SKU>302942275</SKU>
    <SIZE>2XL</SIZE>
</SHOPITEM>
<SHOPITEM>
    <NAME>Product 1</NAME>
    <PRODUCT_ID/>
    <Quantity>7</Quantity>
    <MODEL>Product 1 Model</MODEL>
    <SKU>302942275</SKU>
    <SIZE>3XL</SIZE>
</SHOPITEM>
<SHOPITEM>
    <NAME>Product 2</NAME>
    <PRODUCT_ID/>
    <Quantity>5</Quantity>
    <MODEL>Product 2 Model</MODEL>
    <SKU>302942278</SKU>
    <SIZE>XL</SIZE>
</SHOPITEM>
</SHOP>


т.е. одинаковые товары с разными размерами разделены. Нужно сделать вот так:
spoiler
<?xml version="1.0" encoding="UTF-8"?>
<SHOP>
<SHOPITEM>
    <NAME>Product 1</NAME>
    <PRODUCT_ID/>
    <Quantity>2</Quantity>
    <MODEL>Product 1 Model</MODEL>
    <SKU>302942275</SKU>
    <OPTIONS>
        <OPTION>
            <NAME>Size</NAME>
            <VALUE>M</VALUE>
            <QUANTITY>1</QUANTITY>
        </OPTION>
        <OPTION>
            <NAME>Size</NAME>
            <VALUE>L</VALUE>
            <QUANTITY>3</QUANTITY>
        </OPTION>
        <OPTION>
            <NAME>Size</NAME>
            <VALUE>XL</VALUE>
            <QUANTITY>1</QUANTITY>
        </OPTION>
        <OPTION>
            <NAME>Size</NAME>
            <VALUE>2XL</VALUE>
            <QUANTITY>2</QUANTITY>
        </OPTION>
    </OPTIONS>
</SHOPITEM>
</SHOP>


т.е. чтобы каждый товар был уникальным и все его размеры выводились внутри, в теге OPTIONS (ну и по мелочи, переименовать некорые строки).

Как лучше это реализовать? Примерно логика понятна: нужно прочитать файл, распарсить его в массив, и пересобрать новый массив с нужными параметрами и сгенерировать из него новый xml. Для этого, на мой взгляд, отлично подходит встроенный SimpleXML. Но пока не понятно как не придумал как именно пересобирать массив. Посоветуйте, как бы Вы справились с данной задачей. Спасибо.
  • Вопрос задан
  • 227 просмотров
Пригласить эксперта
Ответы на вопрос 1
самое верное это xslt преобразования, т.к. именно оно разрабатывалось для преобразования одного XML документа в другой... это будет самое быстрое решение, но ИМХО моск можно сломать с этими преобразованиями и их синтаксисом
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы