Я создаю XML, используя цикл while, но теперь мне нужно добавить и добавить сгенерированный XML с информацией заголовка XML и тегом обертки, но я изо всех сил пытаюсь заставить его работать, вот мой код,
$result = mysql_query("SELECT * FROM users") or die(mysql_error()); $row = mysql_fetch_array($result); while ($row = mysql_fetch_array($result)) { $pumaXML = "<userDetails>"; $pumaXML .= "<userID>".$row['uid']."</userID>"; $pumaXML .= "<userName>".$row['userName']."</userName>"; $pumaXML .= "<points>".$row['points']."</points>"; $pumaXML .= "<imageURL>".$row['imageURL']."</imageURL>"; $pumaXML .= "<thumbURL>".$row['thumbURL']."</thumbURL>"; $pumaXML .= "</userDetails>"; };
Я не могу найти способ сделать это, я также попытался сделать функцию, но это не так хорошо, вот этот код,
function createXML($result) { while ($row = mysql_fetch_array($result)) { $pumaXML = "<userDetails>"; $pumaXML .= "<userID>".$row['uid']."</userID>"; $pumaXML .= "<userName>".$row['userName']."</userName>"; $pumaXML .= "<points>".$row['points']."</points>"; $pumaXML .= "<imageURL>".$row['imageURL']."</imageURL>"; $pumaXML .= "<thumbURL>".$row['thumbURL']."</thumbURL>"; $pumaXML .= "</userDetails>"; }; return $pumaXML; };
Thanx заранее!
Вот как это сделать с 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, eg 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 автоматически удалил специальные символы в имени Джона Доу. DOM также удостоверится, что имена элементов XML (или атрибуты, если вы их используете) являются синтаксически действительными. Он также добавил XML-пролог.