Как разобрать сложный xml

Тема в разделе "PHP", создана пользователем primehostnet, 28 июн 2017.

Модераторы: latteo
  1. primehostnet

    primehostnet

    Регистр.:
    28 июн 2015
    Сообщения:
    165
    Симпатии:
    29
    Собственно столкнулся с проблемой что не получается разобрать сложный xml который выдает 1с

    Код:
     <ДанныеОбмена xmlns="goods-schema.dtd" xmlns:d1p1="goods-schema.dtd" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" d1p1:ИБ="УНФ" d1p1:Дата="2017-05-04T14:10:05" d1p1:Пользователь="Пользоватль">
    - <Товары>
    - <Товар xmlns:d3p1="goods-schema.dtd" d3p1:id="c1449a62-7346-11e6-a99b-60e32702ecc8" d3p1:Code="SN00387" d3p1:EAN="_" d3p1:tovar="_rechar bat GP AA NM 2700 mAh 1x2 шт." d3p1:vendor="GP" d3p1:edname="шт" d3p1:parent_code="ФР-00000177" d3p1:reserv_sev="0" d3p1:reserv_simf="0" d3p1:reserv_yalta="0" d3p1:reserv_kacha="0" d3p1:quantity_sev="1" d3p1:quantity_simf="0" d3p1:quantity_yalta="0" d3p1:quantity_kacha="0" d3p1:pn="270AAHC-BL2" d3p1:warranty="0">
      <price0 xmlns="" d3p1:Цена="0" d3p1:Валюта="643" />
      <price1 xmlns="" d3p1:Цена="0" d3p1:Валюта="643" />
      <price2 xmlns="" d3p1:Цена="0" d3p1:Валюта="643" />
      <price3 xmlns="" d3p1:Цена="0" d3p1:Валюта="643" />
      <price_d2 xmlns="" d3p1:Цена="0" d3p1:Валюта="643" />
      <price4 xmlns="" d3p1:Цена="0" d3p1:Валюта="643" />
      <price5 xmlns="" d3p1:Цена="0" d3p1:Валюта="643" />
      <pricesimf xmlns="" d3p1:Цена="0" d3p1:Валюта="643" />
      <price_dbn xmlns="" d3p1:Цена="0" d3p1:Валюта="643" />
      </Товар>
    - <Товар xmlns:d3p1="goods-schema.dtd" d3p1:id="23b0c4d1-3dfa-11e6-9a4d-60e32702ecc8" d3p1:Code="SN29387" d3p1:EAN="_" d3p1:tovar="_Стяжка нейлоновая 100x2.5, 100 шт Telecom (CV-100)" d3p1:vendor="" d3p1:edname="шт" d3p1:parent_code="ФР-00000194" d3p1:reserv_sev="0" d3p1:reserv_simf="0" d3p1:reserv_yalta="0" d3p1:reserv_kacha="0" d3p1:quantity_sev="520" d3p1:quantity_simf="0" d3p1:quantity_yalta="0" d3p1:quantity_kacha="0" d3p1:pn="" d3p1:warranty="0">
      <price0 xmlns="" d3p1:Цена="0" d3p1:Валюта="643" />
      <price1 xmlns="" d3p1:Цена="0" d3p1:Валюта="643" />
      <price2 xmlns="" d3p1:Цена="0" d3p1:Валюта="643" />
      <price3 xmlns="" d3p1:Цена="0" d3p1:Валюта="643" />
      <price_d2 xmlns="" d3p1:Цена="0" d3p1:Валюта="643" />
      <price4 xmlns="" d3p1:Цена="0" d3p1:Валюта="643" />
      <price5 xmlns="" d3p1:Цена="0" d3p1:Валюта="643" />
      <pricesimf xmlns="" d3p1:Цена="0" d3p1:Валюта="643" />
      <price_dbn xmlns="" d3p1:Цена="0" d3p1:Валюта="643" />
      </Товар>
    - <Товар xmlns:d3p1="goods-schema.dtd" d3p1:id="23b0c4d2-3dfa-11e6-9a4d-60e32702ecc8" d3p1:Code="SN39109" d3p1:EAN="_" d3p1:tovar="_Стяжка нейлоновая 150x2.5, 100 шт Telecom" d3p1:vendor="" d3p1:edname="шт" d3p1:parent_code="ФР-00000194" d3p1:reserv_sev="0" d3p1:reserv_simf="0" d3p1:reserv_yalta="0" d3p1:reserv_kacha="0" d3p1:quantity_sev="32" d3p1:quantity_simf="0" d3p1:quantity_yalta="0" d3p1:quantity_kacha="0" d3p1:pn="" d3p1:warranty="0">
      <price0 xmlns="" d3p1:Цена="0" d3p1:Валюта="643" />
      <price1 xmlns="" d3p1:Цена="0" d3p1:Валюта="643" />
      <price2 xmlns="" d3p1:Цена="0" d3p1:Валюта="643" />
      <price3 xmlns="" d3p1:Цена="0" d3p1:Валюта="643" />
      <price_d2 xmlns="" d3p1:Цена="0" d3p1:Валюта="643" />
      <price4 xmlns="" d3p1:Цена="0" d3p1:Валюта="643" />
      <price5 xmlns="" d3p1:Цена="0" d3p1:Валюта="643" />
      <pricesimf xmlns="" d3p1:Цена="0" d3p1:Валюта="643" />
      <price_dbn xmlns="" d3p1:Цена="0" d3p1:Валюта="643" />
      </Товар>
    - <Товар xmlns:d3p1="goods-schema.dtd" d3p1:id="23b0c4d3-3dfa-11e6-9a4d-60e32702ecc8" d3p1:Code="SN36046" d3p1:EAN="_" d3p1:tovar="_Стяжка нейлоновая 200x2.5, 100 шт Telecom" d3p1:vendor="" d3p1:edname="шт" d3p1:parent_code="ФР-00000194" d3p1:reserv_sev="0" d3p1:reserv_simf="0" d3p1:reserv_yalta="0" d3p1:reserv_kacha="0" d3p1:quantity_sev="209" d3p1:quantity_simf="0" d3p1:quantity_yalta="0" d3p1:quantity_kacha="0" d3p1:pn="" d3p1:warranty="0">
      <price0 xmlns="" d3p1:Цена="0" d3p1:Валюта="643" />
      <price1 xmlns="" d3p1:Цена="0" d3p1:Валюта="643" />
      <price2 xmlns="" d3p1:Цена="0" d3p1:Валюта="643" />
      <price3 xmlns="" d3p1:Цена="0" d3p1:Валюта="643" />
      <price_d2 xmlns="" d3p1:Цена="0" d3p1:Валюта="643" />
      <price4 xmlns="" d3p1:Цена="0" d3p1:Валюта="643" />
      <price5 xmlns="" d3p1:Цена="0" d3p1:Валюта="643" />
      <pricesimf xmlns="" d3p1:Цена="0" d3p1:Валюта="643" />
      <price_dbn xmlns="" d3p1:Цена="0" d3p1:Валюта="643" />
      </Товар>
    - <Товар xmlns:d3p1="goods-schema.dtd" d3p1:id="23b0c4d4-3dfa-11e6-9a4d-60e32702ecc8" d3p1:Code="SN36047" d3p1:EAN="_" d3p1:tovar="_Стяжка нейлоновая 250x2.5, 100 шт Telecom" d3p1:vendor="" d3p1:edname="шт" d3p1:parent_code="ФР-00000194" d3p1:reserv_sev="0" d3p1:reserv_simf="0" d3p1:reserv_yalta="0" d3p1:reserv_kacha="0" d3p1:quantity_sev="304" d3p1:quantity_simf="0" d3p1:quantity_yalta="0" d3p1:quantity_kacha="0" d3p1:pn="" d3p1:warranty="0">
      <price0 xmlns="" d3p1:Цена="0" d3p1:Валюта="643" />
      <price1 xmlns="" d3p1:Цена="0" d3p1:Валюта="643" />
      <price2 xmlns="" d3p1:Цена="0" d3p1:Валюта="643" />
      <price3 xmlns="" d3p1:Цена="0" d3p1:Валюта="643" />
      <price_d2 xmlns="" d3p1:Цена="0" d3p1:Валюта="643" />
      <price4 xmlns="" d3p1:Цена="0" d3p1:Валюта="643" />
      <price5 xmlns="" d3p1:Цена="0" d3p1:Валюта="643" />
      <pricesimf xmlns="" d3p1:Цена="0" d3p1:Валюта="643" />
      <price_dbn xmlns="" d3p1:Цена="0" d3p1:Валюта="643" />
      </Товар>
    - <Товар xmlns:d3p1="goods-schema.dtd" d3p1:id="4512ac0e-7348-11e6-a99b-60e32702ecc8" d3p1:Code="OS07579" d3p1:EAN="_" d3p1:tovar="_Стяжка нейлоновая 150x2.5, 100 шт" d3p1:vendor="" d3p1:edname="шт" d3p1:parent_code="ФР-00000194" d3p1:reserv_sev="1" d3p1:reserv_simf="0" d3p1:reserv_yalta="0" d3p1:reserv_kacha="0" d3p1:quantity_sev="200" d3p1:quantity_simf="0" d3p1:quantity_yalta="0" d3p1:quantity_kacha="0" d3p1:pn="" d3p1:warranty="0">
      <price0 xmlns="" d3p1:Цена="0" d3p1:Валюта="643" />
      <price1 xmlns="" d3p1:Цена="0" d3p1:Валюта="643" />
      <price2 xmlns="" d3p1:Цена="0" d3p1:Валюта="643" />
      <price3 xmlns="" d3p1:Цена="0" d3p1:Валюта="643" />
      <price_d2 xmlns="" d3p1:Цена="0" d3p1:Валюта="643" />
      <price4 xmlns="" d3p1:Цена="0" d3p1:Валюта="643" />
      <price5 xmlns="" d3p1:Цена="0" d3p1:Валюта="643" />
      <pricesimf xmlns="" d3p1:Цена="0" d3p1:Валюта="643" />
      <price_dbn xmlns="" d3p1:Цена="0" d3p1:Валюта="643" />
      </Товар>
    - <Товар xmlns:d3p1="goods-schema.dtd" d3p1:id="4b336834-7348-11e6-a99b-60e32702ecc8" d3p1:Code="SN28062" d3p1:EAN="_" d3p1:tovar="_Стяжка нейлоновая 200x3.6, 100 шт. LogicPower" d3p1:vendor="LogicPower" d3p1:edname="шт" d3p1:parent_code="ФР-00000194" d3p1:reserv_sev="2" d3p1:reserv_simf="0" d3p1:reserv_yalta="0" d3p1:reserv_kacha="0" d3p1:quantity_sev="100" d3p1:quantity_simf="0" d3p1:quantity_yalta="0" d3p1:quantity_kacha="0" d3p1:pn="NCT-200/36/100" d3p1:warranty="0">
      <price0 xmlns="" d3p1:Цена="0" d3p1:Валюта="643" />
      <price1 xmlns="" d3p1:Цена="0" d3p1:Валюта="643" />
      <price2 xmlns="" d3p1:Цена="0" d3p1:Валюта="643" />
      <price3 xmlns="" d3p1:Цена="0" d3p1:Валюта="643" />
      <price_d2 xmlns="" d3p1:Цена="0" d3p1:Валюта="643" />
      <price4 xmlns="" d3p1:Цена="0" d3p1:Валюта="643" />
      <price5 xmlns="" d3p1:Цена="0" d3p1:Валюта="643" />
      <pricesimf xmlns="" d3p1:Цена="0" d3p1:Валюта="643" />
      <price_dbn xmlns="" d3p1:Цена="0" d3p1:Валюта="643" />
      </Товар>
    </Товары>
      </ДанныеОбмена>
    Пробовал разные библиотеки, но либо не получается выдрать значнения атрибутов, либо вообще ничего не возвращается. Подскажите хорошую библиотеку для разбора подобных xml файлов, на выходе хотелось бы получить массив
     
  2. KillDead

    KillDead

    Регистр.:
    11 авг 2006
    Сообщения:
    892
    Симпатии:
    567
    Мне кажется это из за xmlns="goods-schema.dtd", оно описывает xml документ, по этому атрибуты могут пропадать. Где этот файл можно скачать? В интернете чтото не нашёл. В самом 1ц он есть?
     
  3. primehostnet

    primehostnet

    Регистр.:
    28 июн 2015
    Сообщения:
    165
    Симпатии:
    29
    Сейчас уточню этот вопрос у 1cника, файл выложу если он есть
     
  4. KillDead

    KillDead

    Регистр.:
    11 авг 2006
    Сообщения:
    892
    Симпатии:
    567
    Если нет - попробуй удалить, xmlns:d3p1="goods-schema.dtd". Парсер будет ругаться и ныть, но параметры введет.
     
  5. Den1xxx

    Den1xxx

    Moderator
    Регистр.:
    15 янв 2014
    Сообщения:
    280
    Симпатии:
    155
    Нестандарт можно в принципе регулярками распарсить.
    Но, блин! При обмене не должно быть нестандарта!
    Это что за версия 1С? И чем выдает — обработкой? Если да, то её можно переписать.
    При импорте по стандарту 1С 8 выдаваться должны 2 файла.
    В одном — товары, в другом — предложения.
    Структура предложений, offers.xml у меня в файле такая:
    Код:
            <Предложения>
                <Предложение>
                    <Ид>b8bccde1-aa7a-11e3-801c-441ea1799ab5</Ид>
                    <Наименование>Вентилятор для ноутбука HP Pavilion DV6-6000 DV6-6050 DV6-6100 DV6-6090 DV7-6000 0028 (L-2-3)</Наименование>
                    <Цены>
                        <Цена>
                            <Представление>11 ZS за шт</Представление>
                            <ИдТипаЦены>7e98bcac-63d7-11e3-95b4-441ea1799ab5</ИдТипаЦены>
                            <ЦенаЗаЕдиницу>11.00</ЦенаЗаЕдиницу>
                            <Валюта>ZS</Валюта>
                            <Единица>шт</Единица>
                            <Коэффициент>1</Коэффициент>
                        </Цена>
                        <Цена>
                            <Представление>8,5 ZS за шт</Представление>
                            <ИдТипаЦены>c5b8f0c1-adea-11e4-b2a7-001999c5e677</ИдТипаЦены>
                            <ЦенаЗаЕдиницу>8.50</ЦенаЗаЕдиницу>
                            <Валюта>ZS</Валюта>
                            <Единица>шт</Единица>
                            <Коэффициент>1</Коэффициент>
                        </Цена>
                        <Цена>
                            <Представление>10 ZS за шт</Представление>
                            <ИдТипаЦены>521c3349-4e14-11e3-aa96-1c6f65539b7a</ИдТипаЦены>
                            <ЦенаЗаЕдиницу>10.00</ЦенаЗаЕдиницу>
                            <Валюта>ZS</Валюта>
                            <Единица>шт</Единица>
                            <Коэффициент>1</Коэффициент>
                        </Цена>
                        <Цена>
                            <Представление>9 ZS за шт</Представление>
                            <ИдТипаЦены>521c334e-4e14-11e3-aa96-1c6f65539b7a</ИдТипаЦены>
                            <ЦенаЗаЕдиницу>9.00</ЦенаЗаЕдиницу>
                            <Валюта>ZS</Валюта>
                            <Единица>шт</Единица>
                            <Коэффициент>1</Коэффициент>
                        </Цена>
                        <Цена>
                            <Представление>19 ZS за шт</Представление>
                            <ИдТипаЦены>521c334f-4e14-11e3-aa96-1c6f65539b7a</ИдТипаЦены>
                            <ЦенаЗаЕдиницу>19.00</ЦенаЗаЕдиницу>
                            <Валюта>ZS</Валюта>
                            <Единица>шт</Единица>
                            <Коэффициент>1</Коэффициент>
                        </Цена>
                    </Цены>
                    <Количество>5</Количество>
                </Предложение>
    Здесь у товара несколько цен, парсится стандартным simplexml_load_file без проблем.
    simplexml_load_file доступен с PHP 5.
     
  6. Minor

    Minor

    Регистр.:
    16 авг 2012
    Сообщения:
    234
    Симпатии:
    88
    [​IMG]
    Это не похоже на валидный XML
     
  7. primehostnet

    primehostnet

    Регистр.:
    28 июн 2015
    Сообщения:
    165
    Симпатии:
    29
    по ходу вы хреново знакомы с xml...
     
  8. Minor

    Minor

    Регистр.:
    16 авг 2012
    Сообщения:
    234
    Симпатии:
    88
    Все с чем я работал, такого не содержало.
     
  9. primehostnet

    primehostnet

    Регистр.:
    28 июн 2015
    Сообщения:
    165
    Симпатии:
    29
    Такое бывает когда xml открывают обычны мблокнотом и копируют кусок из него, нажимая на - который вас смутил, можно свернуть блок. Пример положил в файл
     

    Вложения:

    • newxml.txt
      Размер файла:
      4,7 КБ
      Просмотров:
      3
  10. zvolle

    zvolle Постоялец

    Регистр.:
    19 сен 2016
    Сообщения:
    54
    Симпатии:
    21
    Помогите извлечь описание и фото товара из xml ссылки , дело в том, что они находятся тоже по ссылке xml, которая вставлена в ссылку xml...... вот кусочек кода:
    Код:
    <Products><Product><productCode>17020</productCode>
    <productName>Burtnīca šķērs -šaurlīniju 12lp</productName>
    <article>4750719017153</article>
    <articleCode>32353</articleCode>
    <category>12 lapas</category>
    <categoryCode>1181</categoryCode>
    <manufacturer>ABC JUMS</manufacturer>
    <price>0.19</price><discountPrice/>
    <vatRate>21.00</vatRate>
    <currency>EUR</currency>
    <amount>280</amount>
    <httpDescription>http://www.freko.lv/xml/draft?c=1a&t=proddesc&pa=32353</httpDescription>
    </Product>
    я все отсюда могу залить в магазин кроме описания, так как оно в xml ссылке находится, когда я её смотрю, то там еще и фото есть (ссылка на фото). Как это достать оттуда?
    Может я не по теме тут пишу, но не нашла похожую тему . Prestashop 1.6