基于DOM的XML文档到关系数据库的数据转换方法

时间:2022-08-28 09:08:30

基于DOM的XML文档到关系数据库的数据转换方法

摘要:随着Internet的普及和Web技术的快速发展,XML正迅速成为事实上的数据表示和交换标准,大量XML数据的涌现出来,为了实现XML数据的快速查询和有效的数据交换,需要将XML文档数据转存到关系数据库中。该文介绍了基于DOM的XML文档到关系数据库的数据转换方法。

关键词:XML;DOM;关系数据库;转换

中图分类号:TP311文献标识码:A文章编号:1009-3044(2011)13-2988-03

The Data Transformation Methods for XML Documents to Relational Databases Based on DOM

ZHU Xing-tong

(School of Computer and Electronics Information, Guangdong University of Petrochemical Technology, Maoming 525000, China)

Abstract: With the popularity of Internet and the rapid development of Web technology, XML is quickly becoming the standards for data representation and exchange, the emergence of a large number of XML data in order to achieve fast query and efficient exchange of data, you need to transform from XML document to a relational database. This article describes the data transformation methods for XML documents to relational databases based on DOM.

Key words: XML; DOM; relational database; transform

1 XML技术

XML[1]是eXtensible Markup Language的缩写,称为可扩展标记语言。1998年2月W3C正式推出了XML(XML1.0)。XML的前身是SGML(Standard Generalized Markup Language,标准通用标记语言)。XML是一种简单的数据存储语言,使用一系列简单的标记描述数据,它可以标记任何一种事物。XML的跨平台型,它提供了一种不同的应用程序之间进行数据库交换的公共标准,是一种公共的交互平台。XML文件是由标记以及它所包含的内容构成的文本文件,这些标记可自由定义,其目的是使得XML文件能够很好地体现数据的结构和含义。W3C推出XML的主要目的是使得Internet网络上的数据相互交流更方便,让文件的内容更加显而易懂。

W3C XML1.0规范给出一种XML通用数据模型。XML文档定义为具有一个名字和根元素。一个XML文档有一棵树组成。一棵XML文档树是一个节点的集合,其中每个节点至少有一个父节点,并可以有多个有序的孩子节点。一个XML文档存在六种类型的节点:

1)声名节点。包括XML声明信息和DTD声明信息。

2)元素节点。每个元素节点有一个名字、一个父节点、一个属性节点集、一个有序的由元素节点、字符数据节点和注释节点组成的孩子集。其中根元素节点没有父元素,而且每个文档只有一个根元素节点,它引用整个XML文档资源。

3)字符数据节点。文档中的字符数据字符串,包括CDAT段。

4)属性节点。每个属性节点有一个元素父节点、一个属性名和一个属性值。多值属性例如IDREFS,分成多个节点。

5)注释节点。由一个该文注释组成。

6)处理指令节点。由一个目标和数据组成。

下面给出一个XML文档例子。

XML实用教程

范立锋

24

人民邮电出版社

智能计算

曾黄麟

28

重庆大学出版社

2 文档对象模型(DOM)

XML解析器是XML和应用程序之间的一个软件组织,为应用程序从XML文件中解析出所需要的数据,XML解析模型如图1所示。

文档对象模型(Document Object Model,DOM)提供了一种从其他的应用程序中调用或管理XML数据的方法。处理方法是将一个XML文档看作一个对象,通过固定的方法和属性对XML文档的不同标记进行读写。DOM规范的核心就是树模型,对于要解析的XML文档,解析器会把XML文档加载到内存中,在内存中为XML文件建立逻辑形式的树,上面XML文档例子对于的DOM树图2所示。DOM就是XML文档的一个结构化的视图,它将一个XML文档看作是一棵节点树,而其中的每一个节点代表一个可以与其进行交互的对象。树的节点是一个个的对象,通过操作这棵树和这些对象就可以完成对XML文档的操作,为处理文档的所有方面提供了一个完美的概念性框架。通过DOM解析器处理XML文件效率高,但是,十分消耗系统的资源,比较适合复杂但相对较小的文件。DOM解析器解析XML文件需要下列几个步骤:

1)建立一个DOM解析工厂;

2)通过解析工厂创建DOM解析器;

3)解析指定的XML文件;

4)根据标记名称获得node标记列表;

5)遍历每一个node节点;

6)获得标记内容。

3 XML文档到关系数据库的数据转换

XML文件和关系数据库有很多相似之处,关系数据库采用二维表方式存储数据,XML文件通过标记之间的关系来描述数据。关系数据库提供了对于大批量数据的有效存储管理和快速信息检索、查询的功能。XML文件是基于标记的文本文件,兼容性好,便于组织、解析和交换数据。某个系统获得一个XML文件后,可能需要将XML中的某些标记包含的文本内容转化为数据库中表的一条记录,以便发挥关系数据库在管理数据方面的优势;另一方面,一个应用系统可能需要将关系数据库表中的某些记录转化为一个XML文件,以便与其他系统交互数据,发挥XML文件在数据交换上的优势。

要把XML文件中数据写入关系数据库中,首先需要利用解析器解析出XML文件中的数据,再利用某种技术获得数据库的连接,把数据写进数据库。Sun 公司制定了 JAXP(Java API for XML Processing) 规范,用于在 Java 程序中以一种标准的方式对 XML 文档进行处理。将XML中的某些标记中的内容转化为数据库中表的一条记录,主要步骤如下[5-6]:

1)使用DOM解析器获取标记中的数据;

2)连接数据库,将获取的文本数据作为一条记录添加到数据库。

下面给出使用Java语言开发的基于DOM的XML文档到SQL Server2000数据库的数据转换的实例,实现把上面XML文档例子的数据写入SQL Server2000数据库中books表中,主要代码如下。

public class XMLToDatabase{

public static void main(String args[]){

Connection con=null;

Statement sql=null;

ResultSet rs=null;

try { Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

}catch(Exception e){

System.out.println(""+e);

}try { con=DriverManager.getConnection("jdbc:odbc:books","","");

sql=con.createStatement();

DocumentBuilderFactory factory=

DocumentBuilderFactory.newInstance();

factory.setIgnoringElementContentWhitespace(true); //忽略缩进空白

DocumentBuilder domPaser=factory.newDocumentBuilder();

Document document=domPaser.parse(new File("books.xml")) ;

Element root=document.getDocumentElement();

NodeList list1=root.getElementsByTagName("title");

NodeList list2=root.getElementsByTagName("author");

NodeList list3=root.getElementsByTagName("price");

NodeList list4=root.getElementsByTagName("publisher");

int size=list1.getLength();

String [] title=new String[30];

String [] author=new String[20];

double [] price=new double[4];

String [] publisher=new String[30];

for(int k=0;k

Node titleNode=list1.item(k);

Node authorNode=list2.item(k);

Node priceNode=list3.item(k);

Node publisherNode=list4.item(k);

title[k]= titleNode.getTextContent().trim();

author[k]=authorNode.getTextContent().trim();

String str=priceNode.getTextContent().trim();

price[k]=Double.parseDouble(str);

publisher[k]=publisherNode.getTextContent().trim();

String insertData="INSERT INTO books VALUES('"

+ title[k]+"','"+ author[k]+"','"+ price[k]+"',"+publisher[k]+")";

sql.executeUpdate(insertData);

}con.close();

}catch(Exception e){ System.out.println(e); }

}}

运行上面的程序将前面的XML文档例子中的数据转换到SQL Server2000数据库中,books表中的数据如图3所示。

4 结束语

关系数据库系统相当成熟,把XML文档数据转换到关系数据库中,可以发挥关系数据库在管理数据方面的优势.本文介绍的利用Java语言实现基于DOM的XML文档到SQL Server2000数据库的数据转换方法,经实例验证是正确可行的。利用Java语言与DOM相结合来解析XML文档,需要把XML文档全部加载到内存中。如果XML文档非常庞大,以及解析器耗尽内存,就会造成内存溢出异常。

参考文献:

[1] W3C.Extensible Markup Language (XML) 1.0 (Fifth Edition)[EB/OL]./TR/2008/REC-xml-20081126/.

[2] 朱珊娜,李书琴,安福定.XML文档到关系数据库的转换研究[J].计算机工程与设计,2008,29(21):5507-5509.

[3] 林耀进.基于实现XML文档与关系数据库转换的方法[J].计算机与现代化,2007(6):43-45.

[4] 蔚晓娟,冉静,李爱华,等.基于DOM的XML解析与应用[J].计算机技术与发展,2207,17(4):86-88.

[5] 范立锋.XML实用教程[M].北京:人民邮电出版社,2009.

[6] 哈罗德,刘文红.Java 语言与XML处理教程:SAX,DOM,JDOM,JAXP与TrAX指南[M].北京:电子工业出版社,2003.

注:本文中所涉及到的图表、注解、公式等内容请以PDF格式阅读原文

上一篇:“文件夹隐藏者”病毒的分析与处理 下一篇:基于规划识别的智能答疑系统的研究