Может быть, этот класс, который я написал, поможет вам ...
<?PHP
class ArrayTo
{
protected static function array2xml($xml, $arr, $elements)
{
foreach($arr as $key => $value)
{
$element = isset($elements[0]) ? $elements[0] : $key;
if(is_array($value))
{
$xml->startElement($element);
self::array2xml($xml, $value, array_slice($elements, 1));
$xml->endElement();
continue;
}
$xml->writeElement($element, $value);
$elements = array_slice($elements, 1);
}
}
public static function xml($arr, $root = 'root', $elements = Array(), $version = '1.0', $encoding = 'UTF-8')
{
$xml = new XMLWriter();
$xml->openMemory();
$xml->startDocument($version, $encoding);
$xml->startElement($root);
self::array2xml($xml, $arr, $elements);
$xml->endElement();
return $xml->outputMemory(true);
}
}
?>
Как это использовать ...
$data = array(
"column1" => "im column 1",
"column2" => "im column 2",
"column3" => "im column 3",
"column4" => "im column 4",
"column5" => "im column 5",
);
echo ArrayTo::xml($data, 'table');
// output
<?xml version="1.0" encoding="UTF-8"?>
<table>
<column1>im column 1</column1>
<column2>im column 2</column2>
<column3>im column 3</column3>
<column4>im column 4</column4>
<column5>im column 5</column5>
</table>
Вы также можете использовать третий аргумент $elements
, чтобы переопределить ключ $ на уровне с помощью пользовательского элемента. Например, ...
echo ArrayTo::xml($data, 'table', array('COLUMN_1', 'COLUMN_2'));
// output
<?xml version="1.0" encoding="UTF-8"?>
<table>
<COLUMN_1>im column 1</COLUMN_1>
<COLUMN_2>im column 2</COLUMN_2>
<column3>im column 3</column3>
<column4>im column 4</column4>
<column5>im column 5</column5>
</table>