PHP simpleXML如何以格式化的方式保存文件?
PHP SimpleXML是一种用于解析和操作XML文件的库。然而,当我们尝试将文件保存为格式化的形式时,SimpleXML似乎无法直接提供这样的功能。这个问题的解决方法是使用DOMDocument类重新格式化代码。
要重新格式化代码,可以使用以下代码:
$dom = new DOMDocument('1.0'); $dom->preserveWhiteSpace = false; $dom->formatOutput = true; $dom->loadXML($simpleXml->asXML()); echo $dom->saveXML();
这段代码首先创建了一个DOMDocument对象,并设置了preserveWhiteSpace和formatOutput属性。然后,它加载了SimpleXML对象的XML内容,并使用saveXML()方法将格式化后的XML内容输出。
这个解决方法简单而高效。通过将SimpleXML对象的XML内容加载到DOMDocument对象中,并设置formatOutput属性为true,我们可以轻松地保存XML文件以格式化的形式。
总之,虽然SimpleXML本身似乎无法直接保存XML文件为格式化的形式,但我们可以利用DOMDocument类来实现这个目标。通过将SimpleXML对象的XML内容加载到DOMDocument对象中,并设置formatOutput属性为true,我们可以轻松地保存XML文件以格式化的形式。这个解决方法简单而高效。
问题的原因是希望以格式化的方式保存一个PHP simpleXML文件,但直接使用`saveXML()`方法不能实现。解决方法是使用`dom_import_simplexml`函数将simpleXML对象转换为DomElement对象,然后利用其格式化输出的功能。
具体的解决方法如下:
$dom = dom_import_simplexml($simple_xml)->ownerDocument; $dom->preserveWhiteSpace = false; $dom->formatOutput = true; echo $dom->saveXML();
但是,上述代码不起作用,因为`dom_import_simplexml`函数返回的是一个DOMElement对象,而不是DOMDocument对象。所以需要更正代码中的`ownerDocument`为`documentElement`。
更正后的代码如下:
$dom = dom_import_simplexml($simple_xml)->documentElement; $dom->preserveWhiteSpace = false; $dom->formatOutput = true; echo $dom->saveXML();
需要注意的是,为了使`preserveWhiteSpace`和`formatOutput`生效,需要在导入文档之前设置它们的值。
然而,这样还是不能正常工作。这是因为`dom_import_simplexml`函数返回的DOMElement对象已经导入了文档,所以在设置`preserveWhiteSpace`和`formatOutput`的值之前,需要将其重新导入。
正确的代码如下:
$dom = dom_import_simplexml($simple_xml)->ownerDocument; $dom->preserveWhiteSpace = false; $dom->formatOutput = true; $dom->importNode(dom_import_simplexml($simple_xml), true); echo $dom->saveXML();
通过这种方式,可以以格式化的方式保存PHP simpleXML文件。