Здравствуйте, друзья. Есть плагин, который формирует XML файл для экспорта товаров. Но как бы я не старался не получается в начало строки вставить строчку <?xml version="1.0" encoding="utf-8"?>. К сожалению, для валидации файла она необходима. Сейчас выдает таким образом: Код (Text): <root> <object> <objectid></objectid> <title></title> <type></type> ... </object> <object>...</object> ... </root> Я не профи в этом вопросе, но скорее всего проблема здесь: Код (Text): $xml = new SimpleXMLElementExtended('<root/>'); .... $data = $xml->asXML(); file_put_contents(JPATH_SITE.'/data.xml', $data); header('Content-type: text/xml'); echo $data; die; } class SimpleXMLElementExtended extends SimpleXMLElement { private function addCDataToNode(SimpleXMLElement $node, $value = '') { if ($domElement = dom_import_simplexml($node)) { $domOwner = $domElement->ownerDocument; $domElement->appendChild($domOwner->createCDATASection("{$value}")); } } public function addChildWithCData($name = '', $value = '') { $newChild = parent::addChild($name); if ($value) $this->addCDataToNode($newChild, "{$value}"); return $newChild; } public function addCData($value = '') { $this->addCDataToNode($this, "{$value}"); } } Пожалуйста, хотябы подскажите в каком направлении копать. Уже неделю маюсь этим вопросом, весь интернет перечитал, читал мануал по SimpleXMLElement, но толку ноль(((
в переменной $data - текст, нужно добавить строку? PHP: $data = '<?xml version="1.0" encoding="utf-8"?>' . $data;
Пробовал и так делать, никаких изменений(( все ровно также, как и до этого. Я предполагаю может оно вырезает где-то часть кода, как типа CData
Попробовал вставить сразу после $xml = new SimpleXMLElementExtended('<xml/>'); выдало Call to undefined method SimpleXMLElementExtended::save() удалил $xml->save(); выдает сново не так: <version>1.0</version> <encoding>ISO-8859-1</encoding>
ну видимо потому что для сначала нужно сделать dom_import_simplexml и с ним уже работать А если так? Код (Text): $xml = new SimpleXMLElementExtended('<?xml version="1.0" encoding="utf-8"?><root/>');
Это определенно мистика. Ты где то потерял что то важное. echo $data = $xml->asXML(); echo $data = '<?xml version="1.0" encoding="utf-8"?>' . $data; Ну как оно может не добавится --- Добавлено --- Ты смотришь на вывод или в файл? Может файл просто перестал записываться или записывается не туда куда ты смотришь?
И так тоже делал, выводит ошибку :'(( я несколько раз прошелся по каждой строчке кода, вроде нет криминала.
Он добавляется, но непосредственно в код страницы, что дает ошибку : " 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
Так это уже другая ошибка она связана с установкой хедеров. Убери его и пропадет или ищи где ты перед ним что то выводишь. Попробуй на самый верх перенести. PHP: header('Content-type: text/xml');
Убрал хидер, стало теперь так: Код (Text): <!--?xml version="1.0"?--> <html> <head></head> <body> <root> <object> <objectid></objectid> <title></title> ....
это браузер прикалывается. до вызова header ты не должен ничего выводить на печать. это может быть явный вызов print или просто пробел где нибудь в ...<? или проблема с bom
Да, я только что понял это. Скачал сам файл data.xml Код (Text): <?xml version="1.0"?> <root><object><objectid></objectid> Сюда как-то можно encoding="utf-8" вставить? --- Добавлено --- Спасибо! Решил) $xml = new SimpleXMLElementExtended('<?xml version="1.0" encoding="utf-8"?><root/>');