在SimpleXML中对输出进行优化/格式化

时间:2012-04-12 23:14:42

标签: php formatting simplexml

我有这个simplexml脚本,用于发布从表单输入的数据。

$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"); 

当它出现时,它在一行上看起来像这样:

<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>

但是我已经尝试了HERETHIS AS WELL找到的方法,但是在行中没有正确格式化XML,因为它们应该像

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

在第一个参考链接中,我甚至将loadXML更改为load,因为loadXML期望字符串为XML。有人可以帮我找到解决方案吗?

3 个答案:

答案 0 :(得分:8)

AFAIK simpleXML无法独立完成。

然而,DOMDocument可以。

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

答案 1 :(得分:2)

我认为上面接受来自stackoverflow权威的答案并未解决上述问题。 参考:[我尝试了你的答案,我收到致命错误:在$formatted = $dom->saveXML();

的行上调用未定义的方法DOMElement :: 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"); 

答案 2 :(得分:0)

这段代码对我有用,也很干净:

header('Content-type: text/xml');

echo $xml->asXML();

其中$ xml是SimpleXMLElement-此代码将以以下方式打印XML

<Attribute>
   <ChildAttribute>Value</ChildAttribute>
</Attribute>

这取自official PHP documentation SimpleXMLElement::asXML

希望这对您有帮助!