怎样将XML文件导入数据库

怎样将XML文件导入数据库,第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

C# Linq2Xml还没XPath方便,直接给出示例代码:

using System

using System.Collections.Generic

using System.Linq

using System.Text

using System.Xml

namespace ConsoleApplication1

{

class Program

{

static void Main(string[] args)

{

var sampleText = @"<数字>

<数>1</数>

<数>2</数>

<数>3</数>

<数>4</数>

</数字>"

Console.WriteLine("Input Xml:{0}", sampleText)

var sampleXmlDoc = new XmlDocument()

sampleXmlDoc.LoadXml(sampleText)

var textNodes = sampleXmlDoc.SelectNodes("/数字/数/text()")

var sampleNumbers = new List<double>()

foreach (XmlText textNode in textNodes)

{

double number

if (double.TryParse(textNode.Value, out number))

sampleNumbers.Add(number)

}

var rnd = new Random()

var rndIdx = rnd.Next(0, sampleNumbers.Count)

Console.WriteLine("Random Index:{0}", rndIdx)

var rndNumber = sampleNumbers[rndIdx]

Console.WriteLine("Random Number:{0}", rndNumber)

Console.ReadLine()

}

}

}

XML数据是Web上数据交换和表达的标准形式 和关系数据库相比 XML数据可以表达具有复杂结构的数据 比如树结构的数据 正因为此 在信息集成系统中 XML数据经常被用作信息转换的标准

管理三大领域数据

基于XML数据的特点 XML数据的高效管理通常有着以下的应用

复杂数据的管理

XML可以有效地表达复杂的数据 这些复杂的数据虽然利用关系数据库也可以进行管理 但是这样会带来大量的冗余 比如说文章和作者的信息 如果利用关系数据库 需要分别用关系表达文章和作者的信息 以及这两者之间的关系 这样的表达 在文章和作者关系的关系中分别需要保存文章和作者对应的ID 如果仅仅为了表达文章和作者之间的关系 这个ID是冗余信息 在XML数据中对象之间的关系可以直接用嵌套或者ID IDREF的指向来表达 此外XML数据上的查询可以表达更加复杂的语义 比如XPath可以表达比SQL更为复杂的语义 因此利用XML对复杂数据进行管理是一项有前途的应用

互联网中数据的管理

互联网上的数据与传统的事务数据库与数据仓库都不同 其特点可以表现为模式不明显 经常有缺失信息 对象结构比较复杂 因此在和互联网相关的应用 特别是对从互联网采集和获取的信息进行管理的时候 如果使用传统的关系数据库 存在着产生过多的关系 关系中存在大量的空值等问题 而XML可以用来表达半结构数据 对模式不明显 存在缺失信息和结构复杂的数据可以非常好的表达 特别在许多web系统中 XML已经是数据交换和表达的标准形式 因此XML数据的高效管理在互联网的系统中存在着重要的应用

信息集成中的数据管理

现代信息集成系统超越了传统的联邦数据库和数据集成系统 需要集成多种多样的数据源 包括关系数据库 对象 关系数据库以及网页和文本形式存在的数据 对于这样的数据进行集成 XML这样既可以表达结构数据也可以表达半结构数据的形式成为首选 而在信息集成系统中 为了提高系统的效率 需要建立一个cache 把一部分数据放到本地 在基于XML的信息集成系统中 这个cache就是一个XML数据管理系统 因此XML数据的管理在信息集成系统中也有着重要的应用

开发难点解决之道

在实际的XML数据库以及基于XML的信息集成系统的开发过程中 笔者遇到了一些技术难点 在解决这些难点的过程中 有一些经验是值得借鉴的参考的

关系数据库中复杂查询的优化

在基于关系数据库的XML数据管理系统中 在没有建立索引的情况下 系统的性能非常低 为了提高系统的性能 我们在编码上建立了索引 经过分析 由于在系统中最常做的 *** 作是a x b y的join *** 作 最好的选择是建立二维索引 由于我们的后端数据库没有对二维索引的支持 我们选择了在x和y属性上分别建立B+树的方法 使得系统性能得到了提高 此外 我们发现 在对嵌套查询进行翻译的过程中 如果嵌套查询的结果可能过大 对嵌套查询的结果建立临时表可以提高系统的性能

经验总结 对于一个数据库应用 需要对其workload进行分析 根据workload建立索引 对于执行效率很慢的查询或查询集合 可以通过分析查询计划找出系统的瓶颈进行处理

复杂数据库系统的调试

在调试XML数据的管理系统中 多次出现了小规模数据执行准确 效率很高 而大规模数据执行错误或执行效率很低的情况 对于这种情况 我们采取了定位错误 猜测错误 继而加以解决的策略 也就是首先确定出现错误的 *** 作 使得错误的出现具有可重复性 然后通过逐步删减数据 确定数据出现在哪些数据上 这样就使得调试设计的 *** 作和数据的规模大大减小了 然后根据经验对错误进行猜测 逐步排除错误

经验总结 对于数据规模大 *** 作复杂的数据库系统的调试 首要任务是让错误可以重现 然后把次要因素逐步排除 最后发现问题的所在

复杂数据库系统的测试

由于系统需要处理各种各样的XML上的查询 为了确保系统的健壮性 需要选取多种具有代表性的查询对系统进行测试 为了选取这样的查询 我们考察了XML上影响查询的不同参数 包括查询的长度 查询中包含的关系种类 查询的选择性和查询中约束条件的选择性 根据这些参数 我们分别选择有代表性的查询对系统进行测试

lishixinzhi/Article/program/net/201311/12558


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

原文地址: http://outofmemory.cn/sjk/9895020.html

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

发表评论

登录后才能评论

评论列表(0条)

保存