За последние 24 часа нас посетили 20527 программистов и 1010 роботов. Сейчас ищут 349 программистов ...

Проблема с выводом XML

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

Метки:
  1. permanent85

    permanent85 Новичок

    С нами с:
    21 май 2018
    Сообщения:
    8
    Симпатии:
    0
    Здравствуйте, друзья.
    Есть плагин, который формирует XML файл для экспорта товаров. Но как бы я не старался не получается в начало строки вставить строчку <?xml version="1.0" encoding="utf-8"?>. К сожалению, для валидации файла она необходима. Сейчас выдает таким образом:
    Код (Text):
    1. <root>
    2. <object>
    3. <objectid></objectid>
    4. <title></title>
    5. <type></type>
    6. ...
    7. </object>
    8. <object>...</object>
    9. ...
    10. </root>
    Я не профи в этом вопросе, но скорее всего проблема здесь:
    Код (Text):
    1. $xml = new SimpleXMLElementExtended('<root/>');
    2. ....
    3. $data = $xml->asXML();
    4. file_put_contents(JPATH_SITE.'/data.xml', $data);
    5. header('Content-type: text/xml');
    6. echo  $data;
    7. die;
    8. }
    9.  
    10. class SimpleXMLElementExtended extends SimpleXMLElement
    11.    {
    12.       private function addCDataToNode(SimpleXMLElement $node, $value = '')
    13.       {
    14.          if ($domElement = dom_import_simplexml($node))
    15.          {
    16.             $domOwner = $domElement->ownerDocument;
    17.             $domElement->appendChild($domOwner->createCDATASection("{$value}"));
    18.          }
    19.       }
    20.       public function addChildWithCData($name = '', $value = '')
    21.       {
    22.          $newChild = parent::addChild($name);
    23.          if ($value) $this->addCDataToNode($newChild, "{$value}");
    24.          return $newChild;
    25.       }
    26.       public function addCData($value = '')
    27.       {
    28.          $this->addCDataToNode($this, "{$value}");
    29.       }
    30.    }  
    Пожалуйста, хотябы подскажите в каком направлении копать. Уже неделю маюсь этим вопросом, весь интернет перечитал, читал мануал по SimpleXMLElement, но толку ноль(((
     
  2. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.822
    Симпатии:
    736
    Адрес:
    Татарстан
    в переменной $data - текст, нужно добавить строку?
    PHP:
    1. $data = '<?xml version="1.0" encoding="utf-8"?>' . $data;
     
    permanent85 нравится это.
  3. permanent85

    permanent85 Новичок

    С нами с:
    21 май 2018
    Сообщения:
    8
    Симпатии:
    0
    Пробовал и так делать, никаких изменений(( все ровно также, как и до этого. Я предполагаю может оно вырезает где-то часть кода, как типа CData
     
  4. nospiou

    nospiou Старожил

    С нами с:
    4 фев 2018
    Сообщения:
    3.400
    Симпатии:
    510
    Код (Text):
    1. $xml->version  = "1.0";
    2. $xml->encoding = "ISO-8859-1";
    3. $xml->save();
     
  5. permanent85

    permanent85 Новичок

    С нами с:
    21 май 2018
    Сообщения:
    8
    Симпатии:
    0
    Попробовал вставить сразу после $xml = new SimpleXMLElementExtended('<xml/>');
    выдало Call to undefined method SimpleXMLElementExtended::save()
    удалил $xml->save();
    выдает сново не так:
    <version>1.0</version>
    <encoding>ISO-8859-1</encoding>
     
    #5 permanent85, 21 май 2018
    Последнее редактирование: 21 май 2018
  6. nospiou

    nospiou Старожил

    С нами с:
    4 фев 2018
    Сообщения:
    3.400
    Симпатии:
    510
    ну видимо потому что для сначала нужно сделать dom_import_simplexml и с ним уже работать
    А если так?
    Код (Text):
    1. $xml = new SimpleXMLElementExtended('<?xml version="1.0" encoding="utf-8"?><root/>');
     
  7. permanent85

    permanent85 Новичок

    С нами с:
    21 май 2018
    Сообщения:
    8
    Симпатии:
    0
    В первую очередь так сделал - <root/> остается, а <?xml version="1.0" encoding="utf-8"?> исчезает
     
  8. nospiou

    nospiou Старожил

    С нами с:
    4 фев 2018
    Сообщения:
    3.400
    Симпатии:
    510
    Это определенно мистика. Ты где то потерял что то важное.
    echo $data = $xml->asXML();
    echo $data = '<?xml version="1.0" encoding="utf-8"?>' . $data;
    Ну как оно может не добавится
    --- Добавлено ---
    Ты смотришь на вывод или в файл? Может файл просто перестал записываться или записывается не туда куда ты смотришь?
     
  9. permanent85

    permanent85 Новичок

    С нами с:
    21 май 2018
    Сообщения:
    8
    Симпатии:
    0
    И так тоже делал, выводит ошибку :'(( я несколько раз прошелся по каждой строчке кода, вроде нет криминала.
     

    Вложения:

  10. nospiou

    nospiou Старожил

    С нами с:
    4 фев 2018
    Сообщения:
    3.400
    Симпатии:
    510
    Если вывод тогда в где? Исходный код или какой то плагин?
    --- Добавлено ---
    Какую ошибку?
     
  11. permanent85

    permanent85 Новичок

    С нами с:
    21 май 2018
    Сообщения:
    8
    Симпатии:
    0
    Он добавляется, но непосредственно в код страницы, что дает ошибку : "
    This page contains the following errors:
    error on line 1 at column 44: XML declaration allowed only at the start of the document
    Below is a rendering of the page up to the first error.
    "
    Возможно это важно, я не сказал, что вывод идет через ajax
     
  12. nospiou

    nospiou Старожил

    С нами с:
    4 фев 2018
    Сообщения:
    3.400
    Симпатии:
    510
    Так это уже другая ошибка она связана с установкой хедеров. Убери его и пропадет или ищи где ты перед ним что то выводишь. Попробуй на самый верх перенести.
    PHP:
    1. header('Content-type: text/xml');
     
    permanent85 нравится это.
  13. permanent85

    permanent85 Новичок

    С нами с:
    21 май 2018
    Сообщения:
    8
    Симпатии:
    0
    Убрал хидер, стало теперь так:
    Код (Text):
    1. <!--?xml version="1.0"?-->
    2. <html>
    3. <head></head>
    4. <body>
    5. <root>
    6. <object>
    7. <objectid></objectid>
    8. <title></title>
    9. ....
     
  14. nospiou

    nospiou Старожил

    С нами с:
    4 фев 2018
    Сообщения:
    3.400
    Симпатии:
    510
    это браузер прикалывается. до вызова header ты не должен ничего выводить на печать. это может быть явный вызов print или просто пробел где нибудь в ...<? или проблема с bom
     
    permanent85 нравится это.
  15. permanent85

    permanent85 Новичок

    С нами с:
    21 май 2018
    Сообщения:
    8
    Симпатии:
    0
    Да, я только что понял это. Скачал сам файл data.xml
    Код (Text):
    1. <?xml version="1.0"?>
    2. <root><object><objectid></objectid>
    Сюда как-то можно encoding="utf-8" вставить?
    --- Добавлено ---
    Спасибо! Решил) $xml = new SimpleXMLElementExtended('<?xml version="1.0" encoding="utf-8"?><root/>');