PHP DomDocument output without <?xml version="1.0" encoding="UTF-8"?> PHP DomDocument output without <?xml version="1.0" encoding="UTF-8"?> php php

PHP DomDocument output without <?xml version="1.0" encoding="UTF-8"?>


I think using DOMDocument is a universal solution for valid XML files:

If you have xml allready loaded in a variable:

$t_xml = new DOMDocument();$t_xml->loadXML($xml_as_string);$xml_out = $t_xml->saveXML($t_xml->documentElement);

For XML file from disk:

$t_xml = new DOMDocument();$t_xml->load($file_path_to_xml);$xml_out = $t_xml->saveXML($t_xml->documentElement);

This comment helped: http://www.php.net/manual/en/domdocument.savexml.php#88525


If you want to output HTML, use the saveHTML() function. It automatically avoids a whole lot of XML idiom and handles closed/unclosed HTML idiom properly.

If you want to output XML you can use the fact that DOMDocument is a DOMNode (namely: '/' in XPath expression), thus you can use DOMNode API calls on it to iterate over child nodes and call saveXML() on each child node. This does not output the XML declaration, and it outputs all other XML content properly.

Example:

$xml = get_my_document_object();foreach ($xml->childNodes as $node) {   echo $xml->saveXML($node);}


You can use output buffering to remove it. A bit of a hack but it works.

ob_start();// dom stuff$output = ob_get_contents();ob_end_clean();$clean = preg_replace("/(.+?\n)/","",$output);