2009年3月24日 星期二

php 解析xml

php本身就有函數可以處理xml

這邊以本站的rss feed作例子

//取得xml檔
$xml_file='http://blog.hsin.tw/feed/';
//必須使用fopen開啟 不能直接用喔
$fp = fopen($xml_file,'r');
//這是php官網介紹使用外部連結時的fread方法
$contents = '';
while (!feof($fp)) {
$contents .= fread($fp, 8192);
}
//首先建立一個解析器,編碼不是必要的,這邊設定utf-8
$xp = xml_parser_create('utf-8');
//建立起始和終止元素處理器 下面函式的地方會講
xml_set_element_handler($xp,"startElement","endElement");
//建立資料處理器 下面函式的地方會講
xml_set_character_data_handler($xp,"characterData");
//開始解析xml檔
$result = xml_parse($xp,$contents);
//我是處理成以標籤為索引、內容為值的陣列,以print_r印出來看結果
print_r($_request);
//起始元素處理器
//當遇到xml檔裡面的每個標籤時,就會開始呼叫這個函式處理
//我這裡是把每個標籤名稱都換成小寫,待會給資料處理器使用
function startElement($parser,$tag,$atts)
{
global $_i,$_x,$_request;
$_x = strtolower($tag);
if($_x=='item')
++$_i;
}
//終止元素處理器
//當遇到xml檔裡面的每個標籤結束時,就會開始呼叫這個函式處理
//我這裡沒有作任何處理
function endElement($parser,$tag)
{}
//資料處理器
//會對每個標籤中的內容作處理
//這裡是把標籤名稱設為索引、內容設為值
function characterData($parser,$d)
{
global $_i,$_x,$_request;
if(trim($d)!='')
{
$_request[$_i][$_x]=$d;
}
}

【下列文章您可能也有興趣】

沒有留言: