За последние 24 часа нас посетили 46878 программистов и 1483 робота. Сейчас ищут 1042 программиста ...

перевод строки xml

Тема в разделе "PHP для новичков", создана пользователем gix, 5 май 2015.

  1. gix

    gix Новичок

    С нами с:
    28 окт 2014
    Сообщения:
    168
    Симпатии:
    0
    Добрый день. Облазил кучу форумов перед тем как создать тему, но все найденные советы безрезультатны.
    Есть вот такой код
    Код (Text):
    1.  
    2. <?php
    3. $f=file_get_contents('xml.xml');
    4. $film=new SimpleXMLElement($f);
    5. $actor=$film->addChild('actors');
    6. $actors=['roma','petya','vasya'];
    7. foreach($actors as $row)
    8. {
    9.     $actor->addChild('actor',$row)." <br/>";
    10. }
    11. $film->saveXML('xml.xml');
    Цель ясна-каждый ребенок с новой строки в xml файле. По факту я получаю:
    Код (Text):
    1.  
    2. <?xml version="1.0" encoding="UTF-8"?>
    3. <film>
    4. <actors><actor>roma</actor><actor>petya</actor><actor>vasya</actor></actors></film>
    Скажу сразу вместо <br> пробовал \n(так как сижу под линуксом), html сущности и т.п.
     
  2. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.598
    Симпатии:
    1.764
    Вот что, по вашему, делает эта строка? Своими словами опишите

    А собственно, нахрена это надо? Любая читалка XML и так поймёт, кто чей ребёнок.
     
  3. gix

    gix Новичок

    С нами с:
    28 окт 2014
    Сообщения:
    168
    Симпатии:
    0
    добавляет дочерний элемент и записывает в него значение
    читать файл в одну строку-это бред
     
  4. runcore

    runcore Старожил

    С нами с:
    12 окт 2012
    Сообщения:
    3.625
    Симпатии:
    158
    xml файлы обычно читают/обрабатывают программно. и программе пофиг на перенос строк.

    а если вы хотите посмотреть xml - лично, и чтоб было красиво, есть куча редакторов/просмотрщиков, которые могут красиво его показать, отформатировать, подкрасить и т.д.
     
  5. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.598
    Симпатии:
    1.764
    Почти. Эта строка вызывает метод addChild объекта XML, который добавляет узел (действительно), и возвращает добавленный элемент в виде объекта SimpleXMLElement. Потом то, что он вернул, вы склеиваете с константой "<br />". PHP выполняет эту операцию, действительно, для чего преобразует объект в строку. Далее, результат этой операции просто выбрасывается в мусор, поскольку вы ничему его не присваиваете. Поскольку php произошёл от C, а не от Pascal, то ему пофиг, что вы с результатом операции сделаете. По поводу проблемы - runcore верно написал, программам, обрабатывающим ваш XML, пофиг на строки. А для себя - ну хоть в браузере хром откройте свою XML, будет всё оооооочень красиво.
     
  6. gix

    gix Новичок

    С нами с:
    28 окт 2014
    Сообщения:
    168
    Симпатии:
    0
    ага,спс за ответы. то есть просто с \n или br или CDATA тут вопрос не решить.
     
  7. runcore

    runcore Старожил

    С нами с:
    12 окт 2012
    Сообщения:
    3.625
    Симпатии:
    158
    \n поможет. если потом просомтреть этот xml как обычный текстовый файлик
     
  8. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.598
    Симпатии:
    1.764
    не решить. CDATA - это если бы вам внутри узла надо было сделать несколько строк

    Код (Text):
    1.  
    2. <?xml version="1.0" encoding="UTF-8"?>
    3. <film>
    4. <actors><actor><![CDATA[
    5. Один очень глупый актёр
    6. roma
    7. ]]>
    8. </actor><actor>petya</actor><actor>vasya</actor></actors></film>
    Тогда внутри CDATA парсер XML не будет преобразовывать, грубо говоря, перевод строки в пробел, а оставит точно как есть. Но, поскольку
    , его можно применить только к содержимому одного узла. А язык бы вам подучить не помешало, чтоб людей глупостями такими не смешить, как в вашем коде...
     
  9. rodent90

    rodent90 Новичок

    С нами с:
    26 мар 2015
    Сообщения:
    533
    Симпатии:
    37
    [​IMG]
    Код (PHP):
    1. $dom->formatOutput=true; 
    Зарешает!
    Код (PHP):
    1. $dom=new DOMDocument('1.0', 'utf-8');
    2. $dom->formatOutput=true;
    3. $actors=$dom->createElement('actors');
    4. $actors=$dom->appendChild($actors);
    5. $array=['roma','petya','vasya'];
    6. foreach($array as $value) {
    7.     $value=$dom->createElement('actor',$value);
    8.     $actors->appendChild($value);
    9. }
    10. $dom->save('xml.xml');
    Сохранение в документ:
    Код (PHP):
    1. <?xml version="1.0" encoding="utf-8"?>
    2. <actors>
    3.   <actor>roma</actor>
    4.   <actor>petya</actor>
    5.   <actor>vasya</actor>
    6. </actors>
     
  10. gix

    gix Новичок

    С нами с:
    28 окт 2014
    Сообщения:
    168
    Симпатии:
    0
    спасибо большое. все работает
     
  11. runcore

    runcore Старожил

    С нами с:
    12 окт 2012
    Сообщения:
    3.625
    Симпатии:
    158
    ) они нашли друг друга