Ecco come farlo con DOM :
function createUserDetailsXml(array $result) {
$dom = new DOMDocument;
$dom->formatOutput = TRUE; // enable automatic indenting
$dom->loadXML('<users/>'); // set root node
foreach($result as $row) {
// create user-details node
$user = $dom->createElement('user-details');
// create and append details to user-details node
$user->appendChild(
$dom->createElement('user-id', $row['uid']));
$user->appendChild(
$dom->createElement('user-name', $row['userName']));
$user->appendChild(
$dom->createElement('user-points', $row['points']));
$user->appendChild(
$dom->createElement('image-url', $row['imageURL']));
$user->appendChild(
$dom->createElement('thumb-url', $row['thumbURL']));
// add user-details node to XML document, e.g. users node
$dom->documentElement->appendChild($user);
};
return $dom->saveXML(); // returns the formatted XML
};
Nota che la funzione si aspetta che tu passi l'intera matrice dei risultati, quindi potrei testarla con:
$result = array(
array(
'uid' => 1,
'userName' => 'Gordon',
'points' => PHP_INT_MAX,
'imageURL' => 'http://example.com/gordon.jpg',
'thumbURL' => 'http://example.com/t_gordon.jpg'
),
array(
'uid' => 2,
'userName' => 'John <blink>"Frigging"</blink> Doe',
'points' => 0,
'imageURL' => 'http://example.com/johndoe.jpg',
'thumbURL' => 'http://example.com/t_johndoe.jpg'
)
);
echo createUserDetailsXml($result);
La funzione tornerà quindi
<?xml version="1.0"?>
<users>
<user-details>
<user-id>1</user-id>
<user-name>Gordon</user-name>
<user-points>2147483647</user-points>
<image-url>http://example.com/gordon.jpg</image-url>
<thumb-url>http://example.com/t_gordon.jpg</thumb-url>
</user-details>
<user-details>
<user-id>2</user-id>
<user-name>John <blink>"Frigging"</blink> Doe</user-name>
<user-points>0</user-points>
<image-url>http://example.com/johndoe.jpg</image-url>
<thumb-url>http://example.com/t_johndoe.jpg</thumb-url>
</user-details>
</users>
Si prega di notare che DOM è sfuggito automaticamente ai caratteri speciali nel nome di John Doe per te. DOM si assicurerà anche che i nomi degli elementi XML (o gli attributi se li usi) siano sintatticamente validi. Ha anche aggiunto il prologo XML.