我在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
var tmpquery2:tadoquerytmpfile:string
tmptable:tadotable
begin
if application.MessageBox( '导入答案将会清空以前的考生答案,确定是否继续? ', '提醒 ',MB_OKCANCEL or MB_ICONWARNING)=mrok then
begin
IF BSopen.Execute then
try
try
begin
tmpfile:=bsopen.FileName
tmptable:=tadotable.Create(self)
tmpquery2:=tadoquery.Create (self)
tmpquery2.Connection :=dm.connect
tmptable.Connection :=dm.connect
tmptable.TableName:= 'exam_answer '
with tmpquery2 do
begin
close
sql.Clear
sql.Add( 'delete * from exam_answer ')
execsql
end
tmptable.LoadFromFile(tmpfile)
tmptable.First
while not tmptable.Eof do
begin
with tmpquery2 do
begin
close
sql.Clear
sql.Add( 'insert into exam_answer(kh,xm,sj_id,sjts,tk_id,stbh,tx,daa,dab,dac,dad,dae,daf,tkda,df) values(:kh,:xm,:sj_id,:sjts,:tk_id,:stbh,:tx,:daa,:dab,:dac,:dad,:dae,:daf,:tkda,:df) ')
parameters.ParamByName( 'kh ').Value :=tmptable.fieldbyname( 'kh ').AsString
parameters.ParamByName( 'xm ').Value :=tmptable.fieldbyname( 'xm ').AsString
parameters.ParamByName( 'sj_id ').Value :=tmptable.fieldbyname( 'sj_id ').AsString
parameters.ParamByName( 'tx ').Value :=tmptable.fieldbyname( 'tx ').AsString
parameters.ParamByName( 'sjts ').Value :=tmptable.fieldbyname( 'sjts ').AsString
parameters.ParamByName( 'tk_id ').Value :=tmptable.fieldbyname( 'tk_id ').AsString
parameters.ParamByName( 'stbh ').Value :=tmptable.fieldbyname( 'stbh ').AsString
parameters.ParamByName( 'daa ').Value :=tmptable.fieldbyname( 'daa ').AsBoolean
parameters.ParamByName( 'dab ').Value :=tmptable.fieldbyname( 'dab ').asboolean
parameters.ParamByName( 'dac ').Value :=tmptable.fieldbyname( 'dac ').AsBoolean
parameters.ParamByName( 'dad ').Value :=tmptable.fieldbyname( 'dad ').AsBoolean
parameters.ParamByName( 'dae ').Value :=tmptable.fieldbyname( 'dae ').AsBoolean
parameters.ParamByName( 'daf ').Value :=tmptable.fieldbyname( 'daf ').AsBoolean
parameters.ParamByName( 'tkda ').Value :=tmptable.fieldbyname( 'tkda ').AsString
parameters.ParamByName( 'df ').Value :=tmptable.fieldbyname( 'df ').AsString
execsql
end
tmptable.next
end
showmessage( '导入完成,累死了... ')
end
finally
tmptable.Free
tmpquery2.Free
end
except
showmessage( '导入未完成。:( ')
end
end
end
如果单纯的LOAD出来,它是不直接写到后台数据表的。分析下源码就知道它LOAD之前先CLOSE了数据表。只有一条一条增加到后台数据表了。
将一个数组存入数据库和使用的语言有关系。通常的做法是将数组的内容转换后传递到和语言相关的数据处理方法中进行处理。
涉及到的数据转换的方法:
1:可以转换为json格式
[{key:1},{key:2}]
2:可以转换为xml
<values>
<key>1</key><key>2</key>
</values>
数据处理方法解析转换后的字符串,执行数据库保存 *** 作。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)