这是使用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};请注意,该函数希望您传递完整的结果数组,因此我可以使用以下方法进行测试:
$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);
该函数将返回
<?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>
请注意,DOM自动为您转义了John Doe名称中的特殊字符。DOM还将确保XML元素名称(或属性,如果使用它们)在语法上是有效的。它还添加了XML
Prolog。



