在PHP类中格式化XML的最佳方法是什么.
$xml = "<element attribute=\"something\">...</element>";
$xml = '<element attribute="something">...</element>';
$xml = '<element attribute=\'something\'>...</element>';
$xml = <<<EOF
<element attribute="something">
</element>
EOF;
Run Code Online (Sandbox Code Playgroud)
我很确定这是最后一个!
Gor*_*don 80
使用DOM,您可以做到
$dom = new DOMDocument;
$dom->preserveWhiteSpace = FALSE;
$dom->loadXML('<root><foo><bar>baz</bar></foo></root>');
$dom->formatOutput = TRUE;
echo $dom->saveXML();
Run Code Online (Sandbox Code Playgroud)
给(现场演示)
<?xml version="1.0"?>
<root>
<foo>
<bar>baz</bar>
</foo>
</root>
Run Code Online (Sandbox Code Playgroud)
请参阅DOMDocument::formatOutput和DOMDocument::preserveWhiteSpace属性说明.
pra*_*231 13
这个函数完美地工作,因为你不需要使用任何xml dom库或nething只是将xml生成的字符串传递给它,它将解析并生成带有制表符和换行符的新字符串.
function formatXmlString($xml){
$xml = preg_replace('/(>)(<)(\/*)/', "$1\n$2$3", $xml);
$token = strtok($xml, "\n");
$result = '';
$pad = 0;
$matches = array();
while ($token !== false) :
if (preg_match('/.+<\/\w[^>]*>$/', $token, $matches)) :
$indent=0;
elseif (preg_match('/^<\/\w/', $token, $matches)) :
$pad--;
$indent = 0;
elseif (preg_match('/^<\w[^>]*[^\/]>.*$/', $token, $matches)) :
$indent=1;
else :
$indent = 0;
endif;
$line = str_pad($token, strlen($token)+$pad, ' ', STR_PAD_LEFT);
$result .= $line . "\n";
$token = strtok("\n");
$pad += $indent;
endwhile;
return $result;
}
Run Code Online (Sandbox Code Playgroud)
//这是使用XMLWriter的示例
$w = new XMLWriter;
$w->openMemory();
$w->setIndent(true);
$w->startElement('foo');
$w->startElement('bar');
$w->writeElement("key", "value");
$w->endElement();
$w->endElement();
echo $w->outputMemory();
Run Code Online (Sandbox Code Playgroud)
//输出
<foo>
<bar>
<key>value</key>
</bar>
</foo>
Run Code Online (Sandbox Code Playgroud)