怎样将XML文件导入MYSQL

怎样将XML文件导入MYSQL,第1张

要用php 把XML数据导入mysql ,xml里所有的数据导入数据库

我在php手册里找了个例子

to import xml into mysql

$file = "article_2_3032005467.xml"

$feed = array()

$key = ""

$info = ""

function startElement($xml_parser, $attrs ) {

global $feed

}

function endElement($xml_parser, $name) {

global $feed, $info

$key = $name

$feed[$key] = $info

$info = ""}

function charData($xml_parser, $data ) {

global $info

$info .= $data}

$xml_parser = xml_parser_create()

xml_set_element_handler($xml_parser, "startElement", "endElement")

xml_set_character_data_handler($xml_parser, "charData" )

$fp = fopen($file, "r")

while ($data = fread($fp, 8192))

!xml_parse($xml_parser, $data, feof($fp))

xml_parser_free($xml_parser)

$sql= "INSERT INTO `article` ( `"

$j=0

$i=count($feed)

foreach( $feed as $assoc_index =>$value )

{

$j++

$sql.= strtolower($assoc_index)

if($i>$j) $sql.= "` , `"

if($i <=$j) {$sql.= "` ) VALUES ('"}

}

$h=0

foreach( $feed as $assoc_index =>$value )

{

$h++

$sql.= utf8_decode(trim(addslashes($value)))

if($i-1>$h) $sql.= "', '"

if($i <=$h) $sql.= "','')"

}

$sql=trim($sql)

echo $sql

举例说明如下

xml文件名为: text.xml

xml数据文件的结构如下:

<node1>

<node2 name="abc">123</node2>

</node1>

sql命令如下:

SET @xml = LOAD_FILE('text.xml')-- 要指定完整的文件位置

SELECT ExtractValue(@xml, '/node1/node2/@name') as name,ExtractValue(@xml, '/node1/node2') as data

返回数据结果就是:

name | data

abc | 123

这个方法最简单但不是傻瓜式的方法,需要你对Excel和MySQL都有一点点了解。当然,我在最后提供了一个作为例子的Excel文件,但仍然需要你会写MySQL的INSERT语句,这样才能调试可能出现的错误。1.在需要导入的数据最后一列,写入一个Excel公式(例子中是“SQL”下面的单元格,“SQL”是不必要的,仅仅是为了看起来方便)。=CONCATENATE("insert into employee(name,birthday,email,hobby)values('",RC[-4],"','",RC[-3],"','",RC[-2],"','",RC[-1],"')")这样就会生成insert语句,正如你在例子Excel文件中看到的(当你单击SQL下面的单元格时,可以看到公式)。这个实际上是使用了Excel的CONCATENATE字符串连接函数,将数据生成你需要的SQL语句。RC[-2]是从最后一列(不包括该列)往前数的第二列。2.将"SQL"下面单元格的公式复制到该列的其它单元格,这样可以看到生成了所需要的所有SQL语句。3.将最后一列选中,复制数据到一个文本文件,将该文本文件另存为一个.sql文件(别忘了删除第一行的“SQL”)。4.能够运行sql文件的工具有很多,运行这个文件就可以了。如果没有工具,参考 在windows下批量执行mysql脚本( http://www.albertsong.com/read-21.html)。使用上面的方法,你需要知道什么样的insert语句对于mysql来说是正确的。最常见的是日期的格式,如果不转换成字符串,用上面的方法会生成一个整数,这样插入mysql后就不对了。因此上面的公式改成=CONCATENATE("insert into employee(name,birthday,email,hobby)values('",RC[-4],"','",TEXT(RC[-3],"yyyy-mm-dd hh:mm:ss"),"','",RC[-2],"','",RC[-1],"')")这里用到了TEXT函数来将日期格式化成mysql能接受的日期字符串。具体请参考例子。Excel2Mysql.rar 文件说明如下:doc.txt--本文SqlGen.xls--Excel例子文件create.sql--建表语句insert.sql--生成的insert语句function.txt--需要在Excel中使用的函数写了这么多,实际上就一句话:使用Excel的CONCATENATE函数生成sql语句并执行。如果懂一点儿VBA可以直接生成insert.sql文件


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/7226255.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-03
下一篇 2023-04-03

发表评论

登录后才能评论

评论列表(0条)

保存