【发布时间】:2013-11-06 21:44:01
【问题描述】:
我想使用 php simplexml 生成 xml。
$xml = new SimpleXMLElement('<xml/>');
$output = $xml->addChild('child1');
$output->addChild('child2', "value");
$output->addChild('noValue', '');
Header('Content-type: text/xml');
print($xml->asXML());
输出是
<xml>
<child1>
<child2>value</child2>
<noValue/>
</child1>
</xml>
我想要的是如果标签没有值,它应该像这样显示
<noValue></noValue>
我尝试使用来自Turn OFF self-closing tags in SimpleXML for PHP? 的LIBXML_NOEMPTYTAG
我试过$xml = new SimpleXMLElement('<xml/>', LIBXML_NOEMPTYTAG);,但它不起作用。所以我不知道把LIBXML_NOEMPTYTAG放在哪里
【问题讨论】:
-
嗯,它没有告诉你在链接到的页面中放置它的位置吗?
-
是的,我试过
$xml = new SimpleXMLElement('<xml/>', LIBXML_NOEMPTYTAG);,但输出还是一样的<noValue/>。 -
Confirmed。编辑:嗯,它似乎与您的 PHP 设置有关。在 3v4l 和 Ideone 上,我仍然得到了自动关闭标签,而在我的本地主机 PHP 5.4 上,我得到了预期的结果。
-
LIBXML_NOEMPTYTAG仅适用于DOMDocument,这意味着您需要使用dom_import_simplexml才能将您的 simplexml 对象与该选项一起使用。看我的回答。 -
内容类型显式设置为
text/xml时,严格的 XML 解析器会在遇到空元素时抛出错误。有什么理由这个元素必须是空的并且不能自动关闭?只是好奇这是否是由通用 api 或库强加的(因为它最终应该被修复)