PHP4读取XML,并导入MySQL总结
来源:互联网 发布:个性手机qq主题软件 编辑:程序博客网 时间:2024/05/20 17:42
一:
项目目的,通过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数据,该过程将会调用上面设置的相应处理方式
}
三、以上是操作步骤,接下来贴出实际样例
读取的xml文件try.xml为(该文件是Excel导出的)
输出结果为:
Array ( [listed_SC] => Array ( [0] => 60001 [1] => 60002 [2] => 60004 ) [operationType] => Array ( [0] => A [1] => B [2] => G ) )
项目目的,通过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;
}
?>
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>
<?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 ) )
- PHP4读取XML,并导入MySQL总结
- php 结合缓冲区读取excel数据并批量导入mysql
- php4操作xml
- php4 xml 生成类
- DataSet 读取xml 导入数据
- php4的mysql函数库
- Apache2+PHP4+MySql配置
- php4/5使用Dom方式读取和解析和创建XML简单教程
- dom4j读取xml总结
- 【java】xml文件表建立及读取环境搭建并采用DOM4J完成XML文件导入到数据库
- 读取xml文档并排序
- 读取xml并绑定gridview
- jquery 读取 xml 并显示
- MySQL导入导入命令总结
- 创建xml并写入,读取xml内容
- mysql文件导入总结
- java使用Xstream注解 解析xml文件 并将数据导入MySql数据库中
- C#读取MySql数据库并保存为xml与文本格式
- java 组件
- Linux那些事儿之我是SCSI硬盘-引子
- 长春
- DateTime类使用一:常用时间格式
- CSS技巧,像table一样布局div
- PHP4读取XML,并导入MySQL总结
- ZipStorer - A Pure C# Class to Store Files in Zip
- CheckValidateCode
- Apache+php+mysql在windows下的安装与配置图解(最新版)
- 串行通信控件(MSCOMM32.OCX)完全解答版
- windows xp系统如何配置邮件服务器
- 两分钟做个xhtml+css的网站首页
- 2007-11-27荐股台
- WriteFileEx 和 ReadFileEx