PHP4读取XML,并导入MySQL总结

一:
项目目的,通过php4将Excel数据导出到MySQL中。
解决方法:
1、Excel另存为CSV格式。然后将CSV格式直接导入MySQL中(可以通过PHPMyAdmin导入CSV,改分隔符为“,”)。但是如果Excel文件中含多工作表(多个Sheet中都含数据)那么用CSV是不太方便的。因为Excel直接稻城CSV时是不支持多工作表的,只能将每个工作表的数据复制到新建的Excel文件中然后分别导出。

2、Excel另存为XML格式。XML文件天生就是干异构系统数据迁移用的。同时Excel导出XML文件时支持多工作表。
所以决定用XML文件格式导入。

注:(XML从Excel中导出后是UTF-8格式,PHP操作XML时默认编码是ISO-8859-1,而本人的php程序是GB2312编码,所以在操作时注意文件格式的声明和转换。)

二:
PHP4操作XML的步骤

    (1)创建XML编辑器
     $parser  =  xml_parser_create("Encode"); //参数可填写xml文件的编码格式,该参数可选;
    (2)设置处理开始标记和结束标记的方法,方法名称以字符串形式提供
      xml_set_element_handler($parser, "startElement", "endElement");
                          //指定遇到XML中的任意开始标记是运行 function startElement,
                         遇到任意结束标记(</)时运行function endElement; $parser 代表XML编辑器;和image函数类似
     (3)设置遇到数据(开始标记和结束标记之间的值)时的处理方式
      xml_set_character_data_handler($parser, "characterData"); //设立数据读取时调用function characterData

     设置完处理函数後就要打开XML文件,然后用 xml_parse 解析XML文件。xml_parse的调用需要在设置完以上三步后才能调用,否则报错

     (4) fopen 打开xml 然后 fread 读xml文件

     $filehandler = fopen(“xml文件路径”, "r");  //打开文件

    while ($data = fread($filehandler, filesize($xml_file)))
        //读xml文件,读取内容长度为
filesize($xml_file)个字节 --xml文件长度
   {
    xml_parse($parser, $data, feof($filehandler));  //(5) 解析获得的data数据,该过程将会调用上面设置的相应处理方式
   }
  
三、以上是操作步骤,接下来贴出实际样例
                   
<? php
error_reporting ( E_ALL   |   E_WARNING );
ini_set ( ' display_errors ' , 1 );

$parser   =   xml_parser_create ( " UTF-8 " );  // 创建一个parser编辑器
xml_set_element_handler ( $parser ,   " startElement " ,   " endElement " ); // 设立标签触发时的相应函数 这里分别为startElement和endElenment
xml_set_character_data_handler ( $parser ,   " characterData " ); // 设立数据读取时的相应函数

$xml_file = " try.xml " ; // 指定所要读取的xml文件,可以是url
$filehandler   =   fopen ( $xml_file ,   " r " ); // 打开文件

while  ( $data   =   fread ( $filehandler ,   filesize ( $xml_file )))
{
    
xml_parse ( $parser , $data ,   feof ( $filehandler ));
}
 
fclose ( $filehandler );
$fla   =&   xml_parser_free ( $parser ); // 关闭和释放parser解析器
if  ( $fla ){
   
print_r ( $re );
}
else  {
   
echo   " XML解析器关闭失败! " ;
}
$name = false ;
$position = false ;

function  startElement( $parser_instance ,   $element_name ,   $attrs )         // 起始标签事件的函数,只读取开始标记
{
    
    
global   $Data , $att ;
    
if ( $element_name == " DATA " )
    {
        
$Data   =   true ;
        
switch  ( $attrs [ " SS:TYPE " ]){
            
case   " Number " :
                
$att   =   " listed_SC " ;
                
break ;
            
case   " String " :
                
$att   =   " operationType " ;
                
break ;    
        }
        
    }
else  {
        
$Data   =   false ;
    }
}

function  characterData( $parser_instance ,   $xml_data )                   // 读取数据时的函数
{    global   $Data , $att ;
    
if ( $Data ){
        
$a = iconv ( " UTF-8 " , " GB2312 " , $xml_data );
        getData(
$att , $a );
    }
// End if
     $Data   =   false ;
}

function  endElement( $parser_instance ,   $element_name )                  // 结束标签事件的函数
{
 
}
function  getData( $att , $va ){
    
global   $re ;
    
$re [ $att ][]  =   $va ;
}
?>  
      
读取的xml文件try.xml为(该文件是Excel导出的)
<? xml version="1.0" ?>
<? mso-application progid="Excel.Sheet" ?>
< Workbook  xmlns ="urn:schemas-microsoft-com:office:spreadsheet"
 xmlns:o
="urn:schemas-microsoft-com:office:office"
 xmlns:x
="urn:schemas-microsoft-com:office:excel"
 xmlns:ss
="urn:schemas-microsoft-com:office:spreadsheet"
 xmlns:html
="http://www.w3.org/TR/REC-html40" >
 
< DocumentProperties  xmlns ="urn:schemas-microsoft-com:office:office" >
  
< Author > CFXY-ZJ </ Author >
  
< LastAuthor > CFXY-ZJ </ LastAuthor >
  
< Created > 2007-11-29T02:47:50Z </ Created >
  
< LastSaved > 2007-11-29T02:48:23Z </ LastSaved >
  
< Company > CFXY </ Company >
  
< Version > 11.5606 </ Version >
 
</ DocumentProperties >
 
< ExcelWorkbook  xmlns ="urn:schemas-microsoft-com:office:excel" >
  
< WindowHeight > 8895 </ WindowHeight >
  
< WindowWidth > 13875 </ WindowWidth >
  
< WindowTopX > 120 </ WindowTopX >
  
< WindowTopY > 30 </ WindowTopY >
  
< ProtectStructure > False </ ProtectStructure >
  
< ProtectWindows > False </ ProtectWindows >
 
</ ExcelWorkbook >
 
< Styles >
  
< Style  ss:ID ="Default"  ss:Name ="Normal" >
   
< Alignment  ss:Vertical ="Center" />
   
< Borders />
   
< Font  ss:FontName ="宋体"  x:CharSet ="134"  ss:Size ="12" />
   
< Interior />
   
< NumberFormat />
   
< Protection />
  
</ Style >
 
</ Styles >
 
< Worksheet  ss:Name ="Sheet1" >
  
< Table  ss:ExpandedColumnCount ="2"  ss:ExpandedRowCount ="3"  x:FullColumns ="1"
   x:FullRows
="1"  ss:DefaultColumnWidth ="54"  ss:DefaultRowHeight ="14.25" >
   
< Row >
    
< Cell >< Data  ss:Type ="Number" > 60001 </ Data ></ Cell >
    
< Cell >< Data  ss:Type ="String" > A </ Data ></ Cell >
   
</ Row >
   
< Row >
    
< Cell >< Data  ss:Type ="Number" > 60002 </ Data ></ Cell >
    
< Cell >< Data  ss:Type ="String" > B </ Data ></ Cell >
   
</ Row >
   
< Row >
    
< Cell >< Data  ss:Type ="Number" > 60004 </ Data ></ Cell >
    
< Cell >< Data  ss:Type ="String" > G </ Data ></ Cell >
   
</ Row >
  
</ Table >
  
< WorksheetOptions  xmlns ="urn:schemas-microsoft-com:office:excel" >
   
< Selected />
   
< Panes >
    
< Pane >
     
< Number > 3 </ Number >
     
< ActiveRow > 2 </ ActiveRow >
     
< ActiveCol > 1 </ ActiveCol >
    
</ Pane >
   
</ Panes >
   
< ProtectObjects > False </ ProtectObjects >
   
< ProtectScenarios > False </ ProtectScenarios >
  
</ WorksheetOptions >
 
</ Worksheet >
 
< Worksheet  ss:Name ="Sheet2" >
  
< Table  ss:ExpandedColumnCount ="0"  ss:ExpandedRowCount ="0"  x:FullColumns ="1"
   x:FullRows
="1"  ss:DefaultColumnWidth ="54"  ss:DefaultRowHeight ="14.25" />
  
< WorksheetOptions  xmlns ="urn:schemas-microsoft-com:office:excel" >
   
< ProtectObjects > False </ ProtectObjects >
   
< ProtectScenarios > False </ ProtectScenarios >
  
</ WorksheetOptions >
 
</ Worksheet >
 
< Worksheet  ss:Name ="Sheet3" >
  
< Table  ss:ExpandedColumnCount ="0"  ss:ExpandedRowCount ="0"  x:FullColumns ="1"
   x:FullRows
="1"  ss:DefaultColumnWidth ="54"  ss:DefaultRowHeight ="14.25" />
  
< WorksheetOptions  xmlns ="urn:schemas-microsoft-com:office:excel" >
   
< ProtectObjects > False </ ProtectObjects >
   
< ProtectScenarios > False </ ProtectScenarios >
  
</ WorksheetOptions >
 
</ Worksheet >
</ Workbook >

输出结果为:
Array ( [listed_SC] => Array ( [0] => 60001 [1] => 60002 [2] => 60004 ) [operationType] => Array ( [0] => A [1] => B [2] => G ) )
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值