以下是代码:
$doc = new DomDocument('1.0'); // create root node $root = $doc->createElement('root'); $root = $doc->appendChild($root); $signed_values = array('a' => 'eee', 'b' => 'sd', 'c' => 'df'); // process one row at a time foreach ($signed_values as $key => $val) { // add node for each row $occ = $doc->createElement('error'); $occ = $root->appendChild($occ); // add a child node for each field foreach ($signed_values as $fieldname => $fieldvalue) { $child = $doc->createElement($fieldname); $child = $occ->appendChild($child); $value = $doc->createTextNode($fieldvalue); $value = $child->appendChild($value); } } // get completed xml document $xml_string = $doc->saveXML() ; echo $xml_string;
如果我在浏览器中打印它,我不会得到很好的XML结构,例如
<xml> \n tab <child> etc.
我刚得到
<xml><child>ee</child></xml>
我想成为utf-8这怎么可能?
您可以尝试这样做:
... // get completed xml document $doc->preserveWhiteSpace = false; $doc->formatOutput = true; $xml_string = $doc->saveXML(); echo $xml_string;
您还可以在创建之后立即设置这些参数DOMDocument:
DOMDocument
$doc = new DomDocument('1.0'); $doc->preserveWhiteSpace = false; $doc->formatOutput = true;
这可能更简洁。两种情况下的输出均为(Demo):
<?xml version="1.0"?> <root> <error> <a>eee</a> <b>sd</b> <c>df</c> </error> <error> <a>eee</a> <b>sd</b> <c>df</c> </error> <error> <a>eee</a> <b>sd</b> <c>df</c> </error> </root>
我不知道如何使用来更改缩进字符DOMDocument。您可以使用逐行正则表达式替换(例如,使用preg_replace)对XML进行后处理:
preg_replace
$xml_string = preg_replace('/(?:^|\G) /um', "\t", $xml_string);
另外,还有一个整洁的扩展程序,tidy_repair_string它也可以漂亮地打印XML数据。可以使用它指定缩进级别,但是整洁绝不会输出制表符。
tidy_repair_string
tidy_repair_string($xml_string, ['input-xml'=> 1, 'indent' => 1, 'wrap' => 0]);