note 98226 deleted from simplexmlelement.asXML by danbrown
| From: | danbrown@php.net | Date: | Wed, 02 Jun 2010 20:56:20 +0000 |
| Subject: | note 98226 deleted from simplexmlelement.asXML by danbrown | ||
| References: | 1 | Groups: | php.notes |
| Request: | Send a blank email to php-notes+get-169833@lists.php.net to get a copy of this message | ||
Note Submitter: dimzav at gmail dot com
----
Fixed bug in gary dot malcolm at gmail dot com asPrettyXml() function:
/**
* Pretty format xml.
*
* @static
* @link http://php.net/manual/en/simplexmlelement.asXML.php#77816
* @param string $string
* @return string
*/
private static function _prettyFormatXML($string) {
// put each element on it's own line
$string = preg_replace("#>\s*<#", ">\n<", $string);
// each element to own array
$xmlArray = explode("\n", $string);
// holds indentation
$currIndent = 0;
// set xml element first by shifting of initial element
$string = array_shift($xmlArray) . "\n";
foreach ($xmlArray as $element) {
$element = trim($element, "\n");
// find open only tags... add name to stack, and print to string increment $currIndent
if (preg_match('#^<([\w])+[^>]*>$#U', $element)) {
$string .= str_repeat(' ', $currIndent) . $element . "\n";
$currIndent += self::INDENT;
} elseif (preg_match('#^<\/.+>$#', $element)) {
// find standalone closures, decrement $currIndent, print to string
$currIndent -= self::INDENT;
if ($currIndent < 0) {
echo $element."\n".$string;
exit();
}
$string .= str_repeat(' ', $currIndent) . $element . "\n";
} else {
// find open/closed tags on the same line print to string
$string .= str_repeat(' ', $currIndent) . $element . "\n";
}
}
return $string;
}