Prettifying/Formatting output in SimpleXML

2019-05-11 14:00发布

问题:

I have this simplexml script i'm using to post data entered from a form.

$xml = simplexml_load_file("links.xml");

$sxe = new SimpleXMLElement($xml->asXML()); 

$person = $sxe->addChild("link");
$person->addChild("title", "Q: ".$x_title);
$person->addChild("url", "questions_layout.php#Question$id");

$sxe->asXML("links.xml"); 

and when it comes out it looks like this on one line:

<link><title>Alabama State</title><url>questions_layout.php#Question37</url></link><link><title>Michigan State</title><url>questions_layout.php#Question37</url></link></pages>

But i've tried the method found HERE and THIS AS WELL but neither format the XML correctly in the lines as they should be like

<link>
<title></title>
<url></url>
</link>

In the first reference link I even changed loadXML to load, because loadXML expects a string as XML. Can somebody help me find a solution to this please?

回答1:

AFAIK simpleXML can't do it on its own.

However, DOMDocument can.

$dom = dom_import_simplexml($sxe)->ownerDocument;
$dom->formatOutput = TRUE;
$formatted = $dom->saveXML();


回答2:

i think above accepted answer from stackoverflow authority did not solved above question. Ref : [ I tried your answer and i received a Fatal error: Call to undefined method DOMElement::saveXML() on the line where the $formatted = $dom->saveXML();

$simplexml = simplexml_load_file("links.xml");
$dom = new DOMDocument('1.0');
$dom->preserveWhiteSpace = false;
$dom->formatOutput = true;
$dom->loadXML($simplexml->asXML());
$xml = new SimpleXMLElement($dom->saveXML());

$person = $xml->addChild("link");
$person->addChild("title", "Q: ".$x_title);
$person->addChild("url", "questions_layout.php#Question$id");
$xml->saveXML("links.xml");