怎样将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

将外部数据导入(import)数据库是在数据库应用中一个很常见的需求。其实这就是在数据的管理和 *** 作中的ETL

(Extract,

transform,

load)的L

(Load)部分,也就是说,将特定结构(structure)或者格式(format)的数据导入某个目的地(比如数据库,这里我们讨论MySQL)。

ETL

Process

本文要讨论的内容,是如何方便地将多种格式(JSON,

Text,

XML,

CSV)的数据导入MySQL之中。

本文大纲:

将Text文件(包括CSV文件)导入MySQL

将XML文件导入MySQL

将JSON文件导入MySQL

使用MySQL

workbench的Table

Data

Export

and

Import

Wizard进行JSON或CSV文件的导入导出

1.

将Text文件(包括CSV文件)导入MySQL

这里我们的讨论是基于一个假定,Text

file和CSV

file是有着比较规范的格式的(properly

formatted),比如说每行的每个数据域(field)之间是由一个共同的分隔符(比如tab:

\t)分隔的。

那么首先,你需要根据你的数据的格式(有哪些域),来设计好数据库的对应的表

(的Schema)。

举个例子,要处理的Text文件或者CSV文件是以\t作为分隔符的,每行有id,

name,

balance这么三个数据域,那么首先我们需要在数据库中创建这个表:

CREATE

TABLE

sometable(id

INT,

name

VARCHAR(255),

balance

DECIMAL(8,4))

创建成功以后就可以导入了。 *** 作方式很简单:

LOAD

DATA

LOCAL

INFILE

'你的文件路径(如~/file.csv)'

INTO

TABLE

sometable

FIELDS

TERMINATED

BY

'\t'

[ENCLOSED

BY

'"'(可选)]

LINES

TERMINATED

BY

'\n'

(id,

name,

balance)

这里要注意的是,我们需要开启local-infile这个MySQL的配置参数,才能够成功导入。究其原因,从MySQL的Manual中可以看到这么一段话:

LOCAL

works

only

if

your

server

and

your

client

both

have

been

configured

to

permit

it.

For

example,

if

mysqld

was

started

with

--local-infile=0,

LOCAL

does

not

work.

See

Section

6.1.6,

“Security

Issues

with

LOAD

DATA

LOCAL”.


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

原文地址: http://outofmemory.cn/tougao/11952723.html

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

发表评论

登录后才能评论

评论列表(0条)

保存