За последние 24 часа нас посетил 22871 программист и 1238 роботов. Сейчас ищут 732 программиста ...

Чтение xml на php

Тема в разделе "PHP для новичков", создана пользователем IGARRRRR, 20 авг 2020.

Метки:
  1. IGARRRRR

    IGARRRRR Новичок

    С нами с:
    6 июл 2019
    Сообщения:
    21
    Симпатии:
    0
    Привет всем. Нужна помощь.
    xml вида:
    Код (Text):
    1. <?xml version="1.0" encoding="UTF-8"?>
    2. <ФайлОбмена ВерсияФормата="2.0">
    3.     <Объект Нпп="1" Тип="Заявки">
    4.         <Свойство Имя="Номер" Тип="Строка">
    5.             <Значение>123</Значение>
    6.         </Свойство>
    7.         <Свойство Имя="Статус" Тип="Строка">
    8.             <Значение>Актуальный</Значение>
    9.         </Свойство>
    10.         <Свойство Имя="Контрагент" Тип="Строка">
    11.             <Значение>ООО Киндер</Значение>
    12.         </Свойство>
    13.         <Свойство Имя="ИННКонтрагента" Тип="Строка">
    14.             <Значение>1234567890</Значение>
    15.         </Свойство>
    16.         <Объект Нпп="1" Тип="СтрокаЗаявки">
    17.             <Свойство Имя="Наименование" Тип="Строка">
    18.                 <Значение>Игрушка Свинка Пеппа</Значение>
    19.             </Свойство>        
    20.             <Свойство Имя="Артикул" Тип="Строка">
    21.                 <Значение>АРТ-485<Значение/>
    22.             </Свойство>
    23.             <Свойство Имя="Количество" Тип="Строка">
    24.                 <Значение>1</Значение>
    25.             </Свойство>
    26.             <Свойство Имя="ЕдИзм" Тип="Строка">
    27.                 <Значение>шт</Значение>
    28.             </Свойство>    
    29.         </Объект>
    30.         <Объект Нпп="2" Тип="СтрокаЗаявки">
    31.             <Свойство Имя="Наименование" Тип="Строка">
    32.                 <Значение>Игрушка Микки Маус</Значение>
    33.             </Свойство>        
    34.             <Свойство Имя="Артикул" Тип="Строка">
    35.                 <Значение>АРТ-486<Значение/>
    36.             </Свойство>
    37.             <Свойство Имя="Количество" Тип="Строка">
    38.                 <Значение>1</Значение>
    39.             </Свойство>
    40.             <Свойство Имя="ЕдИзм" Тип="Строка">
    41.                 <Значение>шт</Значение>
    42.             </Свойство>    
    43.         </Объект>
    44.      </Объект>
    45. </ФайлОбмена>
    Нужно вывести Название контрагента, получается вывести только все значения, номер, статус, контрагент и инн.

    Код (Text):
    1. $data = $xml -> Объект;
    2.  
    3. foreach($data as $ob2)
    4. {
    5. foreach($ob2 as $sv2)
    6. {
    7. foreach($sv2 -> Значение as $names)
    8. {
    9.    
    10.     echo "$names "."<br>";
    11.    
    12. }
    13. }
    14.  
    15. }
    Как еще можно вывести данные о товаре, нужно вывести только один товар, обратиться к Нпп1. Всю голову сломал(
     
  2. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.555
    Симпатии:
    1.754
    XPath учите. Хотя, я бы сделал синхронизацию с базой, и всё брал бы уже из базы.
     
    miketomlin нравится это.
  3. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.794
    Симпатии:
    650
    Вы столкнулись с типичной проблемой «XML-щиков»: чтобы достать один объект, нужно перелопатить в среднем полфайла или вообще распарсить все. XML-файлы не для этого нужны.
    --- Добавлено ---
    Вам же написали, что это «ФайлОбмена», а не файл хранения для быстрого извлечения произвольных объектов :)
     
  4. Drunkenmunky

    Drunkenmunky Активный пользователь

    С нами с:
    12 авг 2020
    Сообщения:
    1.476
    Симпатии:
    281
    Для начала прогоните свой xml файл через валидатор. Например вот: https://www.freeformatter.com/xml-validator-xsd.html

    Затем попробуйте вот это.
    Код (Text):
    1. <?php
    2. $s = simplexml_load_file('test.xml');
    3. echo '<pre>';
    4. print_r($s);
    5. ?>
     
  5. IGARRRRR

    IGARRRRR Новичок

    С нами с:
    6 июл 2019
    Сообщения:
    21
    Симпатии:
    0


    Код (Text):
    1. SimpleXMLElement Object
    2. (
    3.     [@attributes] => Array
    4.         (
    5.             [ВерсияФормата] => 2.0
    6.         )
    7.  
    8.     [Объект] => SimpleXMLElement Object
    9.         (
    10.             [@attributes] => Array
    11.                 (
    12.                     [Нпп] => 1
    13.                     [Тип] => Заявки
    14.                 )
    15.  
    16.             [Свойство] => Array
    17.                 (
    18.                     [0] => SimpleXMLElement Object
    19.                         (
    20.                             [@attributes] => Array
    21.                                 (
    22.                                     [Имя] => Номер
    23.                                     [Тип] => Строка
    24.                                 )
    25.  
    26.                             [Значение] => 123
    27.                         )
    28.  
    29.                     [1] => SimpleXMLElement Object
    30.                         (
    31.                             [@attributes] => Array
    32.                                 (
    33.                                     [Имя] => Статус
    34.                                     [Тип] => Строка
    35.                                 )
    36.  
    37.                             [Значение] => Актуальный
    38.                         )
    39.  
    40.                     [2] => SimpleXMLElement Object
    41.                         (
    42.                             [@attributes] => Array
    43.                                 (
    44.                                     [Имя] => Контрагент
    45.                                     [Тип] => Строка
    46.                                 )
    47.  
    48.                             [Значение] => ООО Киндер
    49.                         )
    50.  
    51.                     [3] => SimpleXMLElement Object
    52.                         (
    53.                             [@attributes] => Array
    54.                                 (
    55.                                     [Имя] => ИННКонтрагента
    56.                                     [Тип] => Строка
    57.                                 )
    58.  
    59.                             [Значение] => 1234567890
    60.                         )
    61.  
    62.                 )
    63.  
    64.             [Объект] => Array
    65.                 (
    66.                     [0] => SimpleXMLElement Object
    67.                         (
    68.                             [@attributes] => Array
    69.                                 (
    70.                                     [Нпп] => 1
    71.                                     [Тип] => СтрокаЗаявки
    72.                                 )
    73.  
    74.                             [Свойство] => Array
    75.                                 (
    76.                                     [0] => SimpleXMLElement Object
    77.                                         (
    78.                                             [@attributes] => Array
    79.                                                 (
    80.                                                     [Имя] => Наименование
    81.                                                     [Тип] => Строка
    82.                                                 )
    83.  
    84.                                             [Значение] => Игрушка Свинка Пеппа
    85.                                         )
    86.  
    87.                                     [1] => SimpleXMLElement Object
    88.                                         (
    89.                                             [@attributes] => Array
    90.                                                 (
    91.                                                     [Имя] => Артикул
    92.                                                     [Тип] => Строка
    93.                                                 )
    94.  
    95.                                             [Значение] => АРТ-485
    96.                                         )
    97.  
    98.                                     [2] => SimpleXMLElement Object
    99.                                         (
    100.                                             [@attributes] => Array
    101.                                                 (
    102.                                                     [Имя] => Количество
    103.                                                     [Тип] => Строка
    104.                                                 )
    105.  
    106.                                             [Значение] => 1
    107.                                         )
    108.  
    109.                                     [3] => SimpleXMLElement Object
    110.                                         (
    111.                                             [@attributes] => Array
    112.                                                 (
    113.                                                     [Имя] => ЕдИзм
    114.                                                     [Тип] => Строка
    115.                                                 )
    116.  
    117.                                             [Значение] => шт
    118.                                         )
    119.  
    120.                                 )
    121.  
    122.                         )
    123.  
    124.                     [1] => SimpleXMLElement Object
    125.                         (
    126.                             [@attributes] => Array
    127.                                 (
    128.                                     [Нпп] => 2
    129.                                     [Тип] => СтрокаЗаявки
    130.                                 )
    131.  
    132.                             [Свойство] => Array
    133.                                 (
    134.                                     [0] => SimpleXMLElement Object
    135.                                         (
    136.                                             [@attributes] => Array
    137.                                                 (
    138.                                                     [Имя] => Наименование
    139.                                                     [Тип] => Строка
    140.                                                 )
    141.  
    142.                                             [Значение] => Игрушка Микки Маус
    143.                                         )
    144.  
    145.                                     [1] => SimpleXMLElement Object
    146.                                         (
    147.                                             [@attributes] => Array
    148.                                                 (
    149.                                                     [Имя] => Артикул
    150.                                                     [Тип] => Строка
    151.                                                 )
    152.  
    153.                                             [Значение] => АРТ-486
    154.                                         )
    155.  
    156.                                     [2] => SimpleXMLElement Object
    157.                                         (
    158.                                             [@attributes] => Array
    159.                                                 (
    160.                                                     [Имя] => Количество
    161.                                                     [Тип] => Строка
    162.                                                 )
    163.  
    164.                                             [Значение] => 1
    165.                                         )
    166.  
    167.                                     [3] => SimpleXMLElement Object
    168.                                         (
    169.                                             [@attributes] => Array
    170.                                                 (
    171.                                                     [Имя] => ЕдИзм
    172.                                                     [Тип] => Строка
    173.                                                 )
    174.  
    175.                                             [Значение] => шт
    176.                                         )
    177.  
    178.                                 )
    179.  
    180.                         )
    181.  
    182.                 )
    183.  
    184.         )
    185.  
    186. )
    --- Добавлено ---

    А Возможно ли будет это всё перекинуть в базу mysql?
     
  6. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.555
    Симпатии:
    1.754
    А что мешает? Просмотреть структуру, чуть подумать и написать код, который будет этим заниматься.
     
  7. IGARRRRR

    IGARRRRR Новичок

    С нами с:
    6 июл 2019
    Сообщения:
    21
    Симпатии:
    0
    Как Вы писали выше XPath поможет?
     
  8. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.555
    Симпатии:
    1.754
    XPath поможет найти элемент в самом XML. А в базу записать - ну SimpleXMLDom, к примеру, плюс методы работы с базами...