php文件读取显示xml文件

本例中的xml文件位于 http://www.slashdot.org/slashdot.xml

本例中的php文件读取、显示xml文件内容

以下为php文件的内容,把该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 
// 下面就是定义函数来提取数据: 

// 处理开始标记的属性指 
// $attrs是一个多维数组,键值为属性名, 值就是该属性的值 

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告诉我们正在处理的标记,我们随后会在characterData函数中使用 
// 
// 当遇到</STORY>标记时我们知道要flush所有的临时变量准备操作下一个标记 

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
    } 
    } 


//  传送给此函数的是元素间的数据 
// 例如,对<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 [ ' author ' =   $data ;
        
$current_tag   =   '' ;   
    
default :  
        
break
    } 

?>   


<? php 

function  return_page(){ 
    
global   $temp
    
echo   ' o <A HREF=" ' . $temp [ ' url ' ] . ' "> ' . $temp [ ' title ' ] . ' </A><BR> '
 
echo   ' Author: ' . $temp [ ' author ' ] . ' <BR> ' ;
 
echo   ' ----------------------------- ' ;
 
echo   ' <br> ' ;


//  分析的内容 
$xml_file   =   ' slashdot.xml '

//  定义字符集,默认是UTF-8 
$type   =   ' UTF-8 '

//  建立解析器 
$xml_parser   =   xml_parser_create ( $type ); 

//  设置解析选项 
xml_parser_set_option ( $xml_parser ,  XML_OPTION_CASE_FOLDING ,   true ); 
xml_parser_set_option ( $xml_parser ,  XML_OPTION_TARGET_ENCODING ,   ' UTF-8 ' ); 

//  告诉PHP发现元素时要调用什么函数 
// 这些函数同时也处理元素的属性 

xml_set_element_handler ( $xml_parser ,   ' startElement ' , ' endElement ' ); 

// 告诉PHP对字符数据调用什么函数 
xml_set_character_data_handler ( $xml_parser ,   ' characterData ' ); 

if  ( ! ( $fp   =   fopen ( $xml_file ,   ' r ' ))) { 
    
die ( " 无法打开 $xml_file 文件进行解析!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 ); 

?>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值