3

我有这个 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>

但是我已经尝试过在此处找到的方法,但在行中都没有正确格式化 XML,因为它们应该像

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

在第一个参考链接中,我什至更改loadXMLload,因为loadXML需要一个字符串作为 XML。有人可以帮我找到解决方案吗?

4

3 回答 3

10

AFAIK simpleXML 无法自行完成。

但是,DOMDocument 可以。

$dom = dom_import_simplexml($sxe)->ownerDocument;
$dom->formatOutput = TRUE;
$formatted = $dom->saveXML();
于 2012-04-12T23:21:10.700 回答
2

我认为上述来自stackoverflow权威的接受答案并没有解决上述问题。参考:[我试过你的答案,我收到一个致命错误:调用未定义的方法 DOMElement::saveXML()$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"); 

于 2014-11-05T11:48:23.047 回答
0

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

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

echo $xml->asXML();

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

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

这取自官方 PHP 文档 SimpleXMLElement::asXML

希望对你有帮助!

于 2019-07-13T15:50:13.260 回答