2009年10月19日

他夏了夏天



他夏了夏天
詞曲/吳青峰

幾點鐘 結束夢 他按下鬧鐘
如往常 開始了一天生活
忙工作 忙收穫 早餐吃什麼
他和他 維持齒輪的脈搏

汗水在他的身上化成了彩虹
步伐的節奏延續生命的河流
默默在崗位戰鬥的每個小小英雄
富有和貧窮、卑微和偉大相同
他從不害怕自己被人群淹沒
中午吃便當是他最大享受

幾點鐘 也許是 月出的時候
如往常 結束了一天工作
他心中 幻想著 晚餐吃什麼
家裡的 讓他不怕往前衝

疲累在他的身上化成了笑容
步伐的節奏開始不那麼沈重
輕輕旋轉著夏天地面悶熱的晚風
平凡或特別、笨拙或聰明相同
他從不擔心自己被世界折磨
甜蜜的負荷是他最大依託

帶著笑容的睡意化成了彩虹
在他夢中一口氣走上了星空
喧囂地亮起整個夏天渴望的揮霍
清淡與濃烈、好與壞他都嚐過
他從不介意自己被命運作弄
按下了鬧鐘開啟另一個夢

2009年10月1日

[PHP] Parse xml file

為了幫女朋友寫一個XML的讀寫工具所以今天花了不少時間,
又因為是第二次寫PHP所以一些基本的語法老摸不清楚,每種語言的特性真的差異不小。
像是語法的宣告、陣列的操作、CLASS的結構、參數的存取...ext 都有很大的差異。
但是基本上後來發現PHP有很多部分都很接近C,像是sizeof、函示呼叫方式都很像,可能PHP的作者寫C寫很久吧!
不過寫過JAVA、DOT NET、C、C++、VB後我發現還是SCRIPT LANGUAGE簡單多了!
也因為可以很快的上手(像一天可以入門)進而可以很快的得到成就感。
EMBEDDED就沒辦法了,一個小小的測試都需要花上很多的時間,OK!不費話。


這個XML 的CLASS用了XMLReader來做,主要是讀取一個XML檔案,將檔案內的Entity解讀出來然後加入到一個陣列中再回傳給UI LAYER使用。因此這是個UTILITY CLASS。

檔案的範例:
天使魔鬼/亡命快劫租片5折
2009/05/15
blockbuster_ecoupon_01.jpg
blockbuster_ecoupon_01.jpg
block
living

PHP的程式碼:


header("Content-type: text/html;charset=utf8");
// 儲存單筆資料的物件
class CouponEnt{
var $name;
var $period;
var $photo;
var $pic;
var $brand;
var $category;
}
// 讀取XML並把資料轉為ARRAY
class CouponBank
{
private $file_name;
private $xml_reader;
private $ent_bank;
public static $test = "test
";
private $top_node = "coupon";
public function __construct($file_name)
{
$this->file_name = $file_name;
$this->xml_reader = new XMLReader();
$this->ent_bank = array();
$this->loadFile($this->file_name);
$this->parseFile($this->xml_reader);
}
// load file
private function loadFile($file)
{
$this->xml_reader->open($file);
}
// parset xml
private function parseFile($xml_reader)
{
while($xml_reader->read())
{
if($xml_reader->nodeType == XMLReader::ELEMENT && $xml_reader->name == $this->top_node)
{
$coupon = $this->getElement($xml_reader);
array_push($this->ent_bank, $coupon);
}
}
return $ent_bank;
}
// translate xml element to object
private function getElement($xml_reader)
{
$coupon = new CouponEnt();
while(true)
{
// stop loop on tag end
if($xml_reader->nodeType == XMLReader::END_ELEMENT && $xml_reader->name=="coupon")
{
break;
}
// set element value to entity
if($xml_reader->nodeType == XMLReader::ELEMENT)
{
switch($xml_reader->name)
{
case "name":
$xml_reader->read();
$coupon->name = $xml_reader->value;
$xml_reader->read();
break;
case "period":
$xml_reader->read();
$coupon->period = $xml_reader->value;
$xml_reader->read();
break;
case "photo":
$xml_reader->read();
$coupon->photo = $xml_reader->value;
$xml_reader->read();
break;
case "pic":
$xml_reader->read();
$coupon->pic = $xml_reader->value;
$xml_reader->read();
break;
case "brand":
$xml_reader->read();
$coupon->brand = $xml_reader->value;
$xml_reader->read();
break;
case "category":
$xml_reader->read();
$coupon->category = $xml_reader->value;
$xml_reader->read();
break;
default:
$xml_reader->read();
break;
}
}
else
{
$xml_reader->read();
}
}
return $coupon;
}
public function getCoupons()
{
return $this->ent_bank;
}
public function release()
{
$this->xml_reader->close();
$this->xml_reader = null;
}
public function debug()
{
if(sizeof($this->ent_bank)<=0)
echo "debug : element array is empty.
";
else
{
print_r($this->ent_bank);
}
}
}

// 建立新的物件
$bank = new CouponBank("data.xml");
// 讀取內容,回傳的是陣列,內容物是CouponEnt
$cps = $bank->getCoupons();

for($i = 0; $i <>
{
echo " =================== [Coupon information]
";
echo " name = ".$cps[$i]->name."
";
echo " period = ".$cps[$i]->period."
";
echo " photo = ".$cps[$i]->photo."
";
echo " pic = ".$cps[$i]->pic."
";
echo " brand = ".$cps[$i]->brand."
";
echo " category = ".$cps[$i]->category."
";
echo " =======================================
";
}

$bank->release();

//$bank->debug();
?>