php 解析xml

2008-12-29

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

這邊以本站的rss feed作例子

//取得xml檔
$xml_file='https://itisjoe.github.io/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;
  }
}

startElement、endElement、characterData
三個函式的名稱都可以自己訂喔
不是固定的

按這裡可以看範例

相關連結:用PHP解析XML

update:
使用php5以上的朋友可以試試這兩個函式simplexml_load_string simplexml_load_file喔,方便很多~

Posted by on 2008 年 12 月 29 日 in php, ,