本例中的php文件讀取、顯示xml文件內(nèi)容
以下為php文件的內(nèi)容,把該php文件和slashdot.xml放在同一個文件夾即可
<?php
$open_tags = array(
‘STORY‘ => ‘<STORY>‘,
‘TITLE‘ => ‘<TITLE>‘,
‘URL‘ => ‘<URL>‘,
‘AUTHOR‘=> ‘<AUTHOR>‘
);
$close_tags = array(
‘STORY‘ => ‘</STORY>‘,
‘TITLE‘ => ‘</TITLE>‘,
‘URL‘ => ‘</URL>‘,
‘AUTHOR‘=> ‘</AUTHOR>‘
);
?>
<?php
//下面就是定義函數(shù)來提取數(shù)據(jù):
// 處理開始標(biāo)記的屬性指
// $attrs是一個多維數(shù)組,鍵值為屬性名, 值就是該屬性的值
function startElement($parser, $name, $attrs=‘‘){
global $open_tags, $temp, $current_tag;
$current_tag = $name;
if ($format = $open_tags[$name]){
switch($name){
case ‘STORY‘:
echo ‘新的故事: ‘;
break;
default:
break;
}
}
}
// $current_tag告訴我們正在處理的標(biāo)記,我們隨后會在characterData函數(shù)中使用
//
// 當(dāng)遇到</STORY>標(biāo)記時我們知道要flush所有的臨時變量準(zhǔn)備操作下一個標(biāo)記
<lt;/STORY>‘,
‘TITLE‘ => ‘</TITLE>‘,
‘URL‘ => ‘</URL>‘,
‘AUTHOR‘=> ‘</AUTHOR>‘
);
?>
<?php
//下面就是定義函數(shù)來提取數(shù)據(jù):
// 處理開始標(biāo)記的屬性指
// $attrs是一個多維數(shù)組,鍵值為屬性名, 值就是該屬性的值
function startElement($parser, $name, $attrs=‘‘){
global $open_tags, $temp, $current_tag;
$current_tag = $name;
if ($format = $open_tags[$name]){
switch($name){
case ‘STORY‘:
echo ‘新的故事: ‘;
break;
default:
break;
}
}
}
// $current_tag告訴我們正在處理的標(biāo)記,我們隨后會在characterData函數(shù)中使用
//
// 當(dāng)遇到</STORY>標(biāo)記時我們知道要flush所有的臨時變量準(zhǔn)備操作下一個標(biāo)記
function endElement($parser, $name, $attrs=‘‘){
global $close_tags, $temp, $current_tag;
if ($format = $close_tags[$name]){
switch($name){
case ‘STORY‘:
return_page($temp);
$temp = ‘‘;
break;
default:
break;
}
}
}
// 傳送給此函數(shù)的是元素間的數(shù)據(jù)
// 例如,對<TITLE>Title Here</TITLE>,$data就等于‘Title Here‘
function characterData($parser, $data){
global $current_tag, $temp, $catID;
switch($current_tag){
case ‘TITLE‘:
$temp[‘title‘] = $data;
$current_tag = ‘‘;
break;
case ‘URL‘:
$temp[‘url‘] = $data;
$current_tag = ‘‘;
break;
case ‘AUTHOR‘:
$temp[‘a(chǎn)uthor‘] = $data;
$current_tag = ‘‘;
default:
break;
}
}
?>
<?php
function return_page(){
global $temp;
echo ‘o <A HREF="‘.$temp[‘url‘].‘">‘.$temp[‘title‘].‘</A><BR>‘;
echo ‘Author:‘.$temp[‘a(chǎn)uthor‘].‘<BR>‘;
echo ‘-----------------------------‘;
echo ‘<br>‘;
}
// 分析的內(nèi)容
$xml_file = ‘slashdot.xml‘;
// 定義字符集,默認(rèn)是UTF-8
$type = ‘UTF-8‘;
// 建立解析器
$xml_parser = xml_parser_create($type);
// 設(shè)置解析選項
xml_parser_set_option($xml_parser, XML_OPTION_CASE_FOLDING, true);
xml_parser_set_option($xml_parser, XML_OPTION_TARGET_ENCODING, ‘UTF-8‘);
// 告訴PHP發(fā)現(xiàn)元素時要調(diào)用什么函數(shù)
// 這些函數(shù)同時也處理元素的屬性
xml_set_element_handler($xml_parser, ‘startElement‘,‘endElement‘);
//告訴PHP對字符數(shù)據(jù)調(diào)用什么函數(shù)
xml_set_character_data_handler($xml_parser, ‘characterData‘);
if (!($fp = fopen($xml_file, ‘r‘))) {
die("無法打開 $xml_file 文件進(jìn)行解析!n");
}
// 通過循環(huán)來解析整個文件
while ($data = fread($fp, 4096)) {
if (!($data = utf8_encode($data))) {
echo ‘ERROR‘."n";
}
if (!xml_parse($xml_parser, $data, feof($fp))) {
die(sprintf( "XML error: %s at line %dnn",
xml_error_string(xml_get_error_code($xml_parser)),
xml_get_current_line_number($xml_parser)));
}
}
xml_parser_free($xml_parser);
?>
本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請
點擊舉報。