За последние 24 часа нас посетил 20781 программист и 1119 роботов. Сейчас ищут 350 программистов ...

Вывести данные из xml

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

  1. pH43

    pH43 Новичок

    С нами с:
    16 окт 2020
    Сообщения:
    5
    Симпатии:
    0
    Доброе время суток! Не получается забрать и вывести данные из файла xml. Подскажите, пожалуйста, заранее благодарю!

    Код (Text):
    1.  
    2.  
    3. <rs:data>
    4.     <z:row param1='3000' param2='4000' param3='8000'  />
    5. </rs:data>
    Пытаюсь вывести с помощью этого php:

    Код (Text):
    1. <?php
    2.  
    3.     header("Content-Type: text/html; charset=utf-8");
    4.  
    5.     $xml = simplexml_load_file("./file.xml");
    6.  
    7.     foreach ($xml->data as $offer) {
    8.  
    9.         echo $offer->xpath('row[@param1="Параметр1"]')[0];
    10.         echo $offer->xpath('row[@param2="Параметр2"]')[0];
    11.         echo $offer->xpath('row[@param3="Параметр3"]')[0];
    12.  
    13.     }
    14.  
    15. ?>
    В итоге должно получиться так:

    3000
    4000
    8000
     
  2. Drunkenmunky

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

    С нами с:
    12 авг 2020
    Сообщения:
    1.476
    Симпатии:
    281
  3. pH43

    pH43 Новичок

    С нами с:
    16 окт 2020
    Сообщения:
    5
    Симпатии:
    0
    Спасибо, но у меня проблема, видимо в том, что в названии "<z:row " присутствует двоеточие, обращаться не получается. По логике этот код работает

    Код (Text):
    1.  
    2.  
    3. <?php
    4.   $xml = simplexml_load_file('test.xml');
    5.    echo $xml->row['param1'];
    6. ?>
    если в названии двоеточия нет и если бы было просто row, то вопрос был бы закрыт..
     
  4. Drunkenmunky

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

    С нами с:
    12 авг 2020
    Сообщения:
    1.476
    Симпатии:
    281
  5. pH43

    pH43 Новичок

    С нами с:
    16 окт 2020
    Сообщения:
    5
    Симпатии:
    0
  6. Drunkenmunky

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

    С нами с:
    12 авг 2020
    Сообщения:
    1.476
    Симпатии:
    281
    С xml это так не работает.
    Вам нужно почитать еще о пространстве имен.
    Вот хорошая статья.
    https://starcat.dp.ua/doc/wdh/xml03.htm
     
  7. pH43

    pH43 Новичок

    С нами с:
    16 окт 2020
    Сообщения:
    5
    Симпатии:
    0
    Помог brevis с другого форума. Может кому пригодиться:

    PHP:
    1. $previous_use_error = libxml_use_internal_errors(true);
    2.  
    3. $xml = simplexml_load_file("./file.xml");
    4.  
    5. if ($row = $xml->{'z:row'}) {
    6.     foreach ($row->attributes() as $attr => $value) {
    7.   echo $attr . ': ' . $value . PHP_EOL;
    8.     }
    9. }
    10.  
    11. libxml_use_internal_errors($previous_use_error);
    12.  
    13.  
    14. https://glot.io/snippets/fs97gmxqhg
     
  8. Drunkenmunky

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

    С нами с:
    12 авг 2020
    Сообщения:
    1.476
    Симпатии:
    281
    Отлично помог.
    Ошибки отключать научил.
    А пользоваться валидатором не научил.
     
  9. pH43

    pH43 Новичок

    С нами с:
    16 окт 2020
    Сообщения:
    5
    Симпатии:
    0
    Есть более четкое решение?
     
  10. Drunkenmunky

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

    С нами с:
    12 авг 2020
    Сообщения:
    1.476
    Симпатии:
    281
    Есть.
    Вся необходимая информация по ссылкам выше.
    Если вкратце - прежде, чем работать с xml проверьте его валидатором.