/**
	 * Render a multidimensional array to XML
	 *
	 * @static
	 * @param $array can contain scalar, arrays, Piwik_DataTable and Piwik_DataTable_Array
	 * @param int $level
	 * @return string
	 */
	public static function convertMultiDimensionalArrayToXml($array, $level = 0)
	{ 
		$xml=""; 
		foreach ($array as $key=>$value)
		{
			if(is_numeric($key))
			{
				$key = "row";
			}

			$key = str_replace(' ', '_', $key);
			$marginLeft = str_repeat("\t", $level + 1);

			switch(true)
			{
				// Case dimension is a PHP array
				case (is_array($value)):

					if(empty($value))
					{
						$xml .= $marginLeft . "<$key/>\n";
					}
					else
					{
						$xml.=	$marginLeft .
							"<$key>\n".
								self::convertMultiDimensionalArrayToXml($value, $level + 1).
								"\n". $marginLeft .
							"</$key>\n";
					}
					break;

				// Case dimension is a Piwik_DataTable_Array or a Piwik_DataTable
				case ($value instanceof Piwik_DataTable_Array || $value instanceof Piwik_DataTable):

					if($value->getRowsCount() == 0)
					{
						$xml .= $marginLeft . "<$key/>\n";
					}
					else
					{
						$XMLRenderer = new Piwik_DataTable_Renderer_Xml();
						$XMLRenderer->setTable($value);
						$renderedReport = $XMLRenderer->render();

						$renderedReport = preg_replace("/<\?xml.*\?>\n/", "", $renderedReport);
						$markupToRemove = $value instanceof Piwik_DataTable_Array ? "results" : "result";
						$renderedReport = preg_replace("/\n?<\/?". $markupToRemove .">\n?/", "", $renderedReport);

						// Add one level of margin to each line
						$renderedReport = $marginLeft . preg_replace("/\n/", "\n" . $marginLeft, $renderedReport);

						$xml.=	$marginLeft . "<$key>\n";
						$xml.=	$renderedReport;
						$xml.=	"\n" . $marginLeft . "</$key>\n";
					}

					break;

				// Case scalar
				default:

					$xml.= $marginLeft . "<$key>".Piwik_DataTable_Renderer::formatValueXml($value)."</$key>\n";
					break;
			}
		} 
		return $xml; 
	}
Beispiel #2
0
 protected function convertMultiDimensionalArrayToXml($array, $level = 0)
 {
     $xml = "";
     foreach ($array as $key => $value) {
         if (is_numeric($key)) {
             $key = 'row';
         }
         $key = str_replace(' ', '_', $key);
         $marginLeft = str_repeat("\t", $level + 1);
         if (is_array($value)) {
             if (empty($value)) {
                 $xml .= $marginLeft . "<{$key}/>\n";
             } else {
                 $xml .= $marginLeft . "<{$key}>\n" . $this->convertMultiDimensionalArrayToXml($value, $level + 1) . "\n" . $marginLeft . "</{$key}>\n";
             }
         } else {
             $xml .= $marginLeft . "<{$key}>" . Piwik_DataTable_Renderer::formatValueXml($value) . "</{$key}>\n";
         }
     }
     return $xml;
 }