2010/08/13

使用 PHP 動態產生 XML

直接看一個靜態的例子:
<?php
ob_start();
header('Content-Type: text/xml');

$dom = new DOMDocument('1.0');
$dom->encoding = 'UTF-8';

// 建立母節點 $root
$root = $dom->createElement('root');
$dom->appendChild($root);

// 設定屬性
$root->setAttribute('name', 'xxx');

// 建立 $root 的子節點 $child
$child = $dom->createElement('child');
$root->appendChild($child);

// 建立文字節點 $text
$text = $dom->createTextNode('文字');

// $text 加到 $child 節點底下
$child->appendChild($text);

$xmlStr = $dom->saveXML();
echo $xmlStr;

?>

底下是一個從資料庫撈資料動態產生 RSS 檔的例子:
<?php
ob_start();
header('Content-Type: text/xml');

$dom = new DOMDocument('1.0');
$dom->encoding = 'UTF-8';

// 建立母節點 $rss
$rss = $dom->createElement('rss');
$dom->appendChild($rss);
$rss->setAttribute('version', '2.0');

// 建立第一子節點 $channel
$channel = $dom->createElement('channel');
$rss->appendChild($channel);

// $channel 底下的節點及其文字內容
$title = $dom->createElement('title');
$titleText = $dom->createTextNode('您的 RSS 標題');
$title->appendChild($titleText);
$channel->appendChild($title);

$link = $dom->createElement('link');
$linkText = $dom->createTextNode('http://您的網站連結/');
$link->appendChild($linkText);
$channel->appendChild($link);

$description = $dom->createElement('description');
$descriptionText = $dom->createTextNode('您的描述');
$description->appendChild($descriptionText);
$channel->appendChild($description);

// 查詢資料庫,撈資料來建立 item 節點
require_once("您的資料庫連結檔,包括資料庫名稱,帳號,密碼,連結等.php");
$query = "您的 SQL 子句";
$result = mysql_query($query, 連結);

while($row = @mysql_fetch_assoc($result))
{
$item = $dom->createElement('item');
$channel->appendChild($item);

$title = $dom->createElement('title');
$titleText = $dom->createTextNode($row['文章標題']);
$title->appendChild($titleText);
$item->appendChild($title);

$pubDate = $dom->createElement('pubDate');
$pubDateText = $dom->createTextNode($row['文章日期']);
$pubDate->appendChild($pubDateText);
$item->appendChild($pubDate);

$description = $dom->createElement('description');
$descriptionText = $dom->createTextNode($row['文章描述']);
$description->appendChild($descriptionText);
$item->appendChild($description);

$link = $dom->createElement('link');
$linkText = $dom->createTextNode('您的連結');
$link->appendChild($linkText);
$item->appendChild($link);
}

$xmlStr = $dom->saveXML();
echo $xmlStr;

mysql_close($link);
?>