protected function generateXml(\DOMDocument $doc, $data)
	{
		if (is_array($data) && range(0, count($data) - 1) == array_keys($data)) {
			// $data is a regular indexed array
			$array = $doc->createElement('array');

			foreach ($data as $value) {
				$entry = $doc->createElement('item');
				$entry->appendChild($this->generateXml($doc, $value));

				$array->appendChild($entry);
			}

			return $array;
		}
		else if (is_array($data) || is_object($data)) {
			// $data is an associative array or object
			$map = $doc->createElement('map');

			foreach ($data as $key => $value) {
				$entry = $doc->createElement('item');
				$entry->setAttribute('key', $key);
				$entry->appendChild($this->generateXml($doc, $value));

				$map->appendChild($entry);
			}

			return $map;
		}
		else {
			// $data is a primitive type
			return $doc->createTextNode($data);
		}
	}