function ConvertToXml($record){
if(is_object($record)){
$record = get_object_vars($record);
}
if(!is_array($record)){
trigger_error('$record must be an object or an array.', E_USER_WARNING);
return null;
}
ob_start();
echo '<xml>', PHP_EOL;
foreach($record as $name => $value){
if(is_object($value) or is_array($value) or is_resource($value)){
trigger_error('$record must have only scalar values.', E_USER_WARNING);
return null;
}
if(!is_string($name) or !preg_match('~[a-z_][a-z0-9]*~i', $name)){
trigger_error('$record must have only XML-tag friendly string keys.', E_USER_WARNING);
return null;
}
if(is_null($value)){
echo "<{$name} />", PHP_EOL;
continue;
}
if(is_integer($value) or is_float($value) or is_bool($value)){
echo "<{$name}>{$value}</{$name}>", PHP_EOL;
continue;
}
if(!is_string($name)){
trigger_error('$record must have only scalar values.', E_USER_WARNING);
return null;
}
if(preg_match('~^\s*<.+>\s*$~s', $value)){
if($xml = @simplexml_load_string("<xml>{$value}</xml>")){
echo $value, PHP_EOL;
continue;
}
}
echo "<{$name}>", htmlentities($value, ENT_QUOTES, 'utf-8'), "</{$name}>", PHP_EOL;
}
echo '</xml>', PHP_EOL;
$xml = ob_get_clean();
return @simplexml_load_string($xml);;
}
$record = array();
$record['ID'] = 1;
$record['Name'] = 'SomeName';
$record['Data'] = '<data><foo>one</foo><bar>two</bar></data>';
if($xml = ConvertToXml($record)){
echo $xml->asXML();
}
^ .