За последние 24 часа нас посетили 20613 программистов и 1108 роботов. Сейчас ищут 413 программистов ...

Работа с Xml

Тема в разделе "PHP для новичков", создана пользователем KatePl, 2 окт 2016.

Метки:
  1. KatePl

    KatePl Новичок

    С нами с:
    2 окт 2016
    Сообщения:
    6
    Симпатии:
    0
    Здравствуйте!
    Помогите с вопросом, пожалуйста.
    Имеется xml файл артистов, состоящий из тегов <artist></artist>, которые в свою очередь имеют разный набор атрибутов.
    Необходимо каждого артиста поместить в отдельный json файл. Как получить весь тег <artist></artist> целиком.
     
  2. denis01

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

    С нами с:
    9 дек 2014
    Сообщения:
    12.230
    Симпатии:
    1.715
    Адрес:
    Молдова, г.Кишинёв
    Показывай пример xml файл и как ты пытаешься его получить.

    В каком смысле? Там есть вложенные теги или нужно все атрибуты получить? Может содержание?
     
  3. KatePl

    KatePl Новичок

    С нами с:
    2 окт 2016
    Сообщения:
    6
    Симпатии:
    0
    Если есть файл:
    HTML:
    1. <artist>
    2. <id>123</id>
    3. <name>art1</name>
    4. <albums>
    5. <album>
    6. <id>1</id>
    7. </album>
    8. </albums>
    9. </artist>
    10. <artist>
    11. <id>124</id>
    12. <name>art2</name>
    13. </artist>
    То, необходимо получить всю информацию по артисту. Либо так:
    Код (Text):
    1. <artist>
    2. <id>123</id>
    3. <name>art1</name>
    4. <albums>
    5. <album>
    6. <id>1</id>
    7. </album>
    8. </albums>
    9. </artist>
    Либо так:
    Код (Text):
    1. <id>123</id>
    2. <name>art1</name>
    3. <albums>
    4. <album>
    5. <id>1</id>
    6. </album>
    7. </albums>
    Далее уже эту строку или xml файл хочу перевести в json для импорта в БД.
     
  4. denis01

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

    С нами с:
    9 дек 2014
    Сообщения:
    12.230
    Симпатии:
    1.715
    Адрес:
    Молдова, г.Кишинёв
    Где php код? Или подсказать как xml прочитать на PHP?
     
  5. KatePl

    KatePl Новичок

    С нами с:
    2 окт 2016
    Сообщения:
    6
    Симпатии:
    0
    Подсказать, как узел получить xml. Есть ли функция какая-то? Или нужно по дочерним узлам идти?А как идти по ним, если вложенность большая и структура неизвестна?
    Вариант ниже ничего не дал :(

    PHP:
    1. $xml = simplexml_load_file('artist.xml');
    2. foreach ($xml->artist as $artist)
    3. {
    4.     $json = json_encode($artist);
    5.     print_r($json);
    6. }
    --- Добавлено ---
    Пыталась прочитать файл таким образом:
    PHP:
    1. $file_handle=fopen("artist.xml","r");
    2. while(!feof($file_handle)){
    3.     $line = fgets($file_handle);
    4.     echo $line;
    5. }
    6. fclose($file_handle);
    Но выводит результат он без тегов, а просто сплошной текст из значений тегов.
     
  6. denis01

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

    С нами с:
    9 дек 2014
    Сообщения:
    12.230
    Симпатии:
    1.715
    Адрес:
    Молдова, г.Кишинёв
    ну если там в корне несколько тегов artist, то можно их обвернуть в общий artists например
    PHP:
    1. <?php
    2. $xmlstr =<<<EOF
    3. <?xml version='1.0'?>
    4. <artists>
    5.     <artist>
    6.         <id>123</id>
    7.         <name>art1</name>
    8.         <albums>
    9.             <album>
    10.             <id>1</id>
    11.             </album>
    12.         </albums>
    13.     </artist>
    14.  
    15.     <artist>
    16.         <id>124</id>
    17.         <name>art2</name>
    18.     </artist>
    19. </artists>
    20. EOF;
    21. $artistlist = simplexml_load_string($xmlstr);
    22. foreach ($artistlist->artist as $artist ) {
    23.     echo $artist->name."<br>";
    24. }
    ну так xml это о текстовый файл и fopen() тоже с текстом работает, у неё заявлены функция по разбору xml разве?
     
  7. KatePl

    KatePl Новичок

    С нами с:
    2 окт 2016
    Сообщения:
    6
    Симпатии:
    0
    Пыталась прочитать файл просто
    А как быть, если структура и теги у всех артистов разные? И как потом перевести одного артиста в файл json?
    --- Добавлено ---
    Почему функция fopen() опускает символы <> и названия тегов? Почему не представляет все в виде строки?
     
  8. denis01

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

    С нами с:
    9 дек 2014
    Сообщения:
    12.230
    Симпатии:
    1.715
    Адрес:
    Молдова, г.Кишинёв
    fopen может читать файл и выдавать его содержимое, всё. Почему табуретка не летает?

    сделать цикл по $artist, в foreach можно получать имя ключа массива, имя свойства объекта,
    PHP:
    1. foreach ($artist as $key => $value)
    https://secure.php.net/manual/ru/control-structures.foreach.php
    $key имя тега будет содержать, $value значение

    для json https://secure.php.net/manual/ru/function.json-encode.php
    PHP:
    1. echo json_encode($artist);
     
  9. KatePl

    KatePl Новичок

    С нами с:
    2 окт 2016
    Сообщения:
    6
    Симпатии:
    0
    Почему функция fopen() опускает символы
    У тега artist, есть тег albums, у которого есть свои вложенные теги. Что будет в таком случае выводиться?
     
  10. denis01

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

    С нами с:
    9 дек 2014
    Сообщения:
    12.230
    Симпатии:
    1.715
    Адрес:
    Молдова, г.Кишинёв
    Надо попробовать и посмотреть
     
  11. KatePl

    KatePl Новичок

    С нами с:
    2 окт 2016
    Сообщения:
    6
    Симпатии:
    0
    код не уомпилируется
     
  12. denis01

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

    С нами с:
    9 дек 2014
    Сообщения:
    12.230
    Симпатии:
    1.715
    Адрес:
    Молдова, г.Кишинёв