xml|备份|数据
XML(eXtensible Markup Language,可扩展标记语言)作为一种数据标记语言正在不断引起人们的关注,XML的可扩展性已经受到了越来越多的人的关注,特别是在跨平台的数据交换当中,XML技术的运用可以轻松的解决这个问题.越来越多的企业宣布将在他们的产品中增加对XML的支持,Microsoft未来的发展战略.net的实现也是完全基于XML语言,由此可见,XML将在今后的数据传输和交换发展中占据越来越重要的作用。
XML简介
谈到XML就不能不提HTML,HTML语言的出现推动了互联网的普及.在XML诞生之初甚至现在,也有好多人有这样一种误解XML将完全取代HTML,其实,完全不是这样的。 同HTML一样, XML 是SGML (Standard Generalized Markup Language, 通用标识语言标准)的一个子集,它是描述网络上的数据内容和结构的标准。尽管如此,两这之间还是有很大的差别的。
XML不象HTML,HTML仅仅提供了在页面上显示信息的通用方法(没有上下文相关和动态功能) ,XML则对数据赋予上下文相关功能,它继承了SGML的大部分功能,却使用了不太复杂的技术。因此我们要明白XML不是HTML的一种替代品.在将来最可能的是网站开发者使用XML来描述网站所需数据和网站的结构,而HTML将用来格式化和显示这些数据.
XML不是HTML的替代品,两者的用途是不同的,XML是被设计用来描述数据和定焦与数据是什么,而HTML是被设计用来显示数据和定焦与数据是什么样子的。XML是基于数据的语言,是关于如何描述信息的,它只关注与内容,而HTML是关于如何显示信息的, 它更关注于样式.,传统的HTML对内容的支持非常简单,这就是设计大型WEB网站的时候,一定要使用数据库,因为HTML无法提供对大量内容的支持。
另外,也是非常重要的是XML是可扩展的,在HTML中所有的标志(tags)和文档结构都是预先定义好了的,我们必须使用那些标准的HTML标志,XML允许我们自定义自己的标志和自己的文档结构.
怎样用XML存储和备份数据
其实,通过前面的介绍,相信大家应该明白了为什么要使用XML来进行数据存储和备份了。
传统的数据库存储大都是通过数据库来实现的,数据库的出现给我们带来了很大的便利,提供的快速的信息搜索查询方式,但是数据库也给我们带来了一些不便,现在数据库系统特别的多,像Oracle,Sql Server,Linux下的自由软件MYsql等,他们各自有不同的标准,并且存在于不同的操作系统,以往要在他们之间交换数据尽管可行,但是非常困难,其实通过XML可以很轻松的实现。
XML在数据库应用方面可以有以下用途:
1、 备份数据库
使用XML来备份数据库可以灵活的将数据库中的信息转移到其他的平台和数据库系统中,而且备份数据库占用的空间也非常小,在MicroSoft的Sql Server2000中已经提供了对XML强大的支持,它通过For XML来将数据库中的记录导出为XML格式,可以通过Open Xml将数据从XML中导入到数据库中。这里就不介绍了,下面介绍这样通过WEB方式将Access数据备份到XML文件中,本文使用的数据库是E-home中厨房系统中的菜谱数据库,数据库主要有一个表FOOD,包含id,name,info,type,number,time字段,以下是在Win2000环境下备份ACCESS数据库的代码:(环境Win2000+IIS)
文件名:FoodBackup.asp
<html>
<head>
<title>使用XML备份Access数据库</title>
</head>
<body>
<%
dim objconn
dim objrs
dim objfs
dim xmlfile
set objconn=server.createobject("adodb.connection")
//objconn.open "dsn=food;database=home;uid=;pwd=;"
objconn.open "driver={Microsoft Access Driver (*.mdb)};dbq="+SERVER.MapPath("home.mdb") //连接数据库,指定数据库文件的路径
//如果是MS Sql Server 则为:
//objconn.open "driver={SQL Server};Database=Dbname;Server=ServerName;UID=Username;PWD=Password"
set objrs=server.CreateObject("Adodb.RecordSet")
objrs.Open "food",objconn
set objfs=server.CreateObject("Scripting.FileSystemObject")
set xmlfile=objfs.CreateTextFile("d:\food.xml")
xmlfile.writeline "<foodlist>"
while not objrs.EOF
xmlfile.writeline "<food><id>"&objrs("ID")&"</id><name>"
xmlfile.writeline objrs("name")&"</name><info>"&objrs("info")&"</info><type>"&objrs("type")
xmlfile.writeline "</type><number>"&objrs("number")&"</number><time>"&objrs("time")&"</time></food>"
objrs.MoveNext
wend
xmlfile.writeline "</foodlist>"
objrs.Close
set objrs=nothing
xmlfile.close
set xmlfile=nothing
%>
</body>
</html>
通过以上代码就可以实现对ACCESS数据库FOOD中表food的备份,只需要在本文件的基础上进行改动,就可以实现自由选择数据库中的表进行备份了。备份前文件的大小是3.65M,备份后经过Winzip压缩后的大小只有225KB,只需要通过对以上文件进行改动,也可以实现对Oracle,Excell.Access,Visual Foxpro等数据库信息的备份。
我们还可以通过PHP操作来对其他数据库进行备份,以下是在Linux下通过Apache+PHP对Mysql数据库的备份的文件代码:
文件一、Listtable.php (文件列出数据库中的所有表格,供选择备份)
<html>
<head>
<title>使用XML备份Mysql数据库</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head>
<body bgcolor="#FFFFFF" text="#000000">
请选择要备份的表格:
<?
$con=mysql_connect('localhost','root','xswlily');
$lists=mysql_list_tables("embed",$con);
//数据库连接代码
$i=0;
while($i<mysql_num_rows($lists)){
$tb_name=mysql_tablename($lists,$i);
echo "<a href=backup.php?table=".$tb_name.">".$tb_name."</a><br>";
//列出所有的表格
$i++;}
?>
</body>
</html>
文件二、Backup.php
<?if ($table=="") header("Location:listtable.php");?><html>
<head>
<title>使用XML备份Mysql数据库</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head>
<body bgcolor="#FFFFFF" text="#000000">
<?
$con=mysql_connect('localhost','root','xswlily');
$query="select * from $table ";
//数据库查询
$result=mysql_db_query("embed",$query,$con);
$filestr="<"."?xml version=\"1.0\" encoding=\"GB2312\"?".">";
$filestr.="<".$table."s>";
while ($row=mysql_fetch_array($result))
//列出所有的记录
{$filestr.="<".$table.">";