/** * @param mixed $data * @param string $root * @param int $level * @param bool $format * * @return string */ protected static function arrayToXmlInternal($data, $root = null, $level = 1, $format = true) { $xml = null; if (ArrayUtils::isArrayNumeric($data)) { foreach ($data as $value) { $xml .= self::arrayToXmlInternal($value, $root, $level, $format); } } else { if (ArrayUtils::isArrayAssociative($data)) { if (!empty($root)) { if ($format) { $xml .= str_repeat("\t", $level - 1); } $xml .= "<{$root}>"; if ($format) { $xml .= "\n"; } } foreach ($data as $key => $value) { $xml .= self::arrayToXmlInternal($value, $key, $level + 1, $format); } if (!empty($root)) { if ($format) { $xml .= str_repeat("\t", $level - 1); } $xml .= "</{$root}>"; if ($format) { $xml .= "\n"; } } } else { if (is_array($data)) { // empty array } else { // not an array if (!empty($root)) { if ($format) { $xml .= str_repeat("\t", $level - 1); } $xml .= "<{$root}>"; if (!is_null($data)) { if (is_bool($data)) { $xml .= $data ? 'true' : 'false'; } else { if (is_int($data) || is_float($data)) { $xml .= $data; } else { if (is_string($data)) { $htmlValue = htmlspecialchars($data, ENT_QUOTES, 'UTF-8'); $xml .= $htmlValue; } } } } $xml .= "</{$root}>"; if ($format) { $xml .= "\n"; } } } } } return $xml; }