我正在将php变量转换为XML格式。
我注意到当我只使用 DOMDocument 时;
$ dom-> formatOutput = true;
创建XML,它正确格式化(即行缩进等)
仅使用DOMDocument的代码
$dom = new DOMDocument('1.0','UTF-8');
$dom->formatOutput = true;
$root = $dom->createElement('student');
$dom->appendChild($root);
$result = $dom->createElement('result');
$root->appendChild($result);
$result->setAttribute('id', 1);
$result->appendChild( $dom->createElement('name', 'Opal Kole') );
$result->appendChild( $dom->createElement('sgpa', '8.1') );
$result->appendChild( $dom->createElement('cgpa', '8.4') );
echo '<xmp>'. $dom->saveXML() .'</xmp>';
$dom->save('result.xml') or die('XML Create Error');
**结果**
<?xml version="1.0" encoding="UTF-8"?>
<student>
<result id="1">
<name>Opal Kole</name>
<sgpa>8.1</sgpa>
<cgpa>8.4</cgpa>
</result>
</student>
但是,如果我尝试将 simplexml 与 domDocument 一起使用,则它不再正确格式化;
下面是问题的一个示例
$dom = new domDocument;
$dom->formatOutput = true;
$root = $dom->appendChild($dom->createElement( "user" ));
$sxe = simplexml_import_dom( $dom );
$sxe->addChild("firstname", "John");
$sxe->addChild("surname", "Brady");
$sxe->asXML('testingXML.xml');
结果;
<?xml version="1.0"?>
<user><firstname>John</firstname><surname>Brady</surname></user>
你会注意到它不再以所需的方式格式化。
我已经按照所有将简单的xml与dom结合在一起的在线教程示例,但没有一个正确格式化。
更新
我尝试了很多针对forumns的解决方案,但似乎并不适用于我。
然而,我刚刚找到了这个解决方案 - 它确实有效 - 然而,它长期啰嗦。它要求我首先使用simplyXML保存文件,然后重新加载保存的文件,现在使用DocumentDom保存它: $sxe->asXML('simple_xml_create.xml');
$simplexml = simplexml_load_file("simple_xml_create.xml");
$dom = new DOMDocument('1.0');
$dom->preserveWhiteSpace = false;
$dom->formatOutput = true;
$dom->loadXML($simplexml->asXML());
$xml = new SimpleXMLElement($dom->saveXML());
$xml->saveXML("simple_xml_create.xml");
是否有更优雅的解决方案?
答案 0 :(得分:0)
首先,您成功地发现 DOMDocument 支持格式化XML,而 SimpleXMLElement 则不支持。这是完全正确的。
因此,您希望使用 SimpleXMLElement 来实际创建XML文档,但您也希望从 DOMDocument 的格式设置选项中受益,您可能希望了解这一事实这两个库都是姐妹库,彼此之间的关系非常好。当您使用simplexml_import_dom
将 DOMNode 对象转换为 SimpleXMLElement 对象时,您似乎已经知道了这一点。
$dom = new domDocument;
$dom->formatOutput = true;
$root = $dom->appendChild($dom->createElement( "user" ));
$sxe = simplexml_import_dom( $dom );
$sxe->addChild("firstname", "John");
$sxe->addChild("surname", "Brady");
$sxe->asXML('php://output');
$dom->save('php://output');
SimpleXMLElement::saveXML()
方法将使用非格式化输出,而DOMDocument::save()
方法将在设置参数时使用格式:
<?xml version="1.0"?>
<user><firstname>John</firstname><surname>Brady</surname></user>
<?xml version="1.0"?>
<user>
<firstname>John</firstname>
<surname>Brady</surname>
</user>
那已经是。