您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 销售管理 > 第九章XML与其它数据文件的转换
第九章XML与其它数据文件的转换主要内容数据库到XML转换XML到数据库转换XML到Excel表转换Excel表到XML转换难点XML到Excel表转换Excel表到XML转换XML文档是为Internet进行数据交换而设计的,在数据到达终点系统后,需要和系统中的各种数据联合工作;另外,XML文档存储数据是以文本的形式,可能存在安全性等问题。所以XML文档和各种数据文件之间的转换就极为重要。本章准备解决XML和常用数据的转换。整体分两部分:XML和数据库表的转换,XML和电子表格的转换。9.1数据库表转换成XML文档数据库是各种系统中存储数据的理想所在,另外,在数据管理等方面数据库有许多独到之处。要想使XML融入各种系统中,进行它和数据库的转换甚为必要。本节我们讨论数据库表到XML文档的转换。需要强调的是,我们认为数据库表到XML文档的转换有特别的意义。前面章节的内容中讲到许多构建XML文档的方法,坦率地讲,手工创建的XML文档不可能有多丰富,由数据库表转换能大大地改善这种状况。作者认为这是产生XML文档的有效途径。编程语言使用Java、解析XML使用DOM接口、数据库使用Access。9.1.1建立数据库单击Windows7系统桌面上的“开始”“所有程序”“MicrosoftOfficeAccess”启动数据库管理系统,点击新建数据库出现如图9.1所示界面。图9.1新建数据库界面将新建数据库命名为“员工信息数据库.mdb”,并点击创建。9.1.2建立数据表创建好数据库之后,就可以在该数据库中建立多个表。打开“员工信息数据库.mdb”数据库在选择界面上选择“使用设计器创建表”后,单击“设计”,将出现创建表的界面。使用该界面创建名字为“员工信息表”的表,并指定字段及其类型如图9.2所示。图9.2新建表设计录入表的各行数据,得到的样表如图9.3所示。图9.3输入数据后的数据表9.1.3建立ODBC数据源选择“控制面板”“管理工具”“ODBC数据源”。双击ODBC数据源图标,出现“ODBC数据源管理器”界面,如图9.4所示,该界面显示了已有的数据源名称。图9.4数据源管理器选择“用户DSN”,单击“添加”按钮,出现“创建数据源”界面,如图9.5所示。图9.5创建新数据源选择合适的驱动程序。我们要访问Access数据表,选择“MicrosoftAccessDriver”。单击完成按钮,将出现“ODBCMicrosoftAccess安装”界面,如图9.6所示。图9.6ODBCMicrosoftAccess安装为数据源起一个自己中意的名字,这里给出的是donghong。这个数据源代表一个数据库。单击界面上的“选择”按钮,选择前面建立的数据库“员工信息数据库.mdb”即可。9.1.4将数据库表转换成XML文档转换过程的Java处理程序如下。importjavax.xml.transform.*;importjavax.xml.transform.stream.*;importjavax.xml.transform.dom.*;importorg.w3c.dom.*;importjavax.xml.parsers.*;importjava.io.*;importjava.sql.*;publicclassDataBase_XML{Connectioncon;Statementsql;ResultSetrs;int[]number;String[]name={};String[]gender={};int[]age;String[]title={};float[]salary;privatevoidconnection(){try{Class.forName(sun.jdbc.odbc.JdbcOdbcDriver);con=DriverManager.getConnection(jdbc:odbc:donghong);}catch(ClassNotFoundExceptione){System.out.println(+e);}catch(SQLExceptione1){System.out.println(+e1);}}privatevoidReadRecord(){try{sql=con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);rs=sql.executeQuery(SELECT*FROM员工信息表);rs.last();intrecordAmount=rs.getRow();number=newint[recordAmount];name=newString[recordAmount];gender=newString[recordAmount];age=newint[recordAmount];title=newString[recordAmount];salary=newfloat[recordAmount];intk=0;rs.beforeFirst();while(rs.next()){number[k]=rs.getInt(1);name[k]=rs.getString(2);gender[k]=rs.getString(3);age[k]=rs.getInt(4);title[k]=rs.getString(5);salary[k]=rs.getFloat(6);k++;}con.close();}catch(SQLExceptione){System.out.println(e);}}privatevoidcreateXML(){try{DocumentBuilderFactoryfactory=DocumentBuilderFactory.newInstance();DocumentBuilderpaser=factory.newDocumentBuilder();Documentdocument=paser.newDocument();document.setXmlVersion(1.0);Elementroot=document.createElement(员工信息表);document.appendChild(root);for(intk=0;kname.length;k++){Nodeemployee=document.createElement(员工);root.appendChild(employee);Nodehao=document.createElement(员工号);hao.appendChild(document.createTextNode(Integer.toString(number[k])));Nodexingming=document.createElement(姓名);xingming.appendChild(document.createTextNode(name[k]));Nodexingbie=document.createElement(性别);xingbie.appendChild(document.createTextNode(gender[k]));Nodenianling=document.createElement(年龄);nianling.appendChild(document.createTextNode(Integer.toString(age[k])));Nodezhiwu=document.createElement(职务);zhiwu.appendChild(document.createTextNode(title[k]));Nodepay=document.createElement(薪水);pay.appendChild(document.createTextNode(Float.toString(salary[k])));employee.appendChild(hao);employee.appendChild(xingming);employee.appendChild(xingbie);employee.appendChild(nianling);employee.appendChild(zhiwu);employee.appendChild(pay);}TransformerFactorytransFactory=TransformerFactory.newInstance();Transformertransformer=transFactory.newTransformer();DOMSourcedomSource=newDOMSource(document);Filef=newFile(newXML.xml);FileOutputStreamout=newFileOutputStream(f);StreamResultxmlResult=newStreamResult(out);transformer.transform(domSource,xmlResult);out.close();}catch(Exceptione){System.out.println(e);}}publicstaticvoidmain(String[]arg){DataBase_XMLdata=newDataBase_XML();data.connection();data.ReadRecord();data.createXML();}}在Java开发环境中保存为DataBase_XML.java。编译并运行,得到的XML文档在IE中显示的效果如图9.7所示。图9.7由数据库表转换成的XML文档效果图对Java程序作简单解释如下。connection()方法完成数据库的连接,使用的是JDBC-ODBC桥接器。ReadRecord()方法完成数据库表内容的读取。“rs=sql.executeQuery(SELECT*FROM员工信息表);”查询员工信息表中的所有数据到结果集中,进而得到结果集的行数为存储结果的几个数组初始化,将结果中的第n行的每一列的值分别赋予对应数组的第n个元素。createXML()方法完成XML文档的构建。此方法其实是第七章DOM创建XML文档的扩展,数据的来源不再是程序中简单地给出,而是来自一个数据库。9.2XML文档到数据库表的转换本节我们讨论XML文档到数据库表的转换。编程语言仍是Java、解析XML使用DOM接口、数据库使用Access。9.2.1准备XML文档和数据库表XML文档准备用上节生成的newXML.xml。数据库也使用上节的库。需要新建一个表“普通员工信息表”,各字段的定义复制“员工信息表”,数据内容为空。9.2.2Java处理程序的编制Java处理程序代码如下。importorg.w3c.dom.*;importjavax.xml.parsers.*;importjava.io.*;importjava.sql.*;publicclassXML_DataBase{Connectioncon;Statementsql;ResultSetrs;int[]number;String[]name={};String[]gender={};int[]age;String[]title={};float[]salary;boolean[]flag;intrecordAmount;privatevoidconnection(){try{Class.forName(sun.jdbc.odbc.JdbcOdbcDriver);con=DriverManager.getConnection(jdbc:odbc:donghong);}catch(ClassNotFoundExceptione){System.out.println(+e);}catch(SQLExceptione1){Sy
本文标题:第九章XML与其它数据文件的转换
链接地址:https://www.777doc.com/doc-2123690 .html