《XML技术及应用》实验报告.docx
《《XML技术及应用》实验报告.docx》由会员分享,可在线阅读,更多相关《《XML技术及应用》实验报告.docx(15页珍藏版)》请在冰豆网上搜索。
《XML技术及应用》实验报告
《XML技术及应用》实验报告
学生姓名:
学生学号:
指导教师:
实验成绩:
一、实验内容:
1、通过Java编程实现对“通讯录”的XML文档的解析,并把解析结果存到数据库的表中。
2、进一步实现相反的过程,即将数据库表的内容读出来,并将其转化为XML文件存储起来。
2、XML文档代码
Student.xml
xmlversion="1.0"encoding="GB2312"?
>
Jimmey
男
台湾台北011-2857
华晨宇
男
湖北武汉1809210
Victorian
女
上海725120
尼坤
男
韩国首尔9218337
3、对student.xml进行解析
1、配置Access数据库
控制面板----系统和安全------管理工具-----数据源(ODBC)-----系统DSN-----添加Access驱动程序-----填写数据源名、路径等。
2、Java代码
ConnPara.java
publicclassConnPara{
StringdbClass=null;
Stringurl=null;
Stringusername=null;
Stringpassword=null;
publicConnPara(){};
publicConnPara(StringpdbClass,Stringpurl,Stringpusername,Stringppassword){
dbClass=pdbClass;
url=purl;
username=pusername;
password=ppassword;
}
publicStringgetDbClass(){returndbClass;}
publicStringgetUrl(){returnurl;}
publicStringgetUsername(){returnusername;}
publicStringgetPassword(){returnpassword;}
publicvoidsetDbClass(Stringstr){dbClass=str;}
publicvoidsetUrl(Stringstr){url=str;}
publicvoidsetUsername(Stringstr){username=str;}
publicvoidsetPassword(Stringstr){password=str;}
}
Jiexi.java
importjavax.xml.parsers.*;
importjava.awt.TextArea;
importjava.io.*;
importjava.sql.Connection;
importjava.sql.DriverManager;
importjava.sql.SQLException;
importjava.sql.Statement;
importorg.w3c.dom.*;
publicclassJiexi{
publicstaticvoidmain(String[]args)throwsException{
StringName,Sex,Address,Phone;
Connectioncon=null;
Statementsql;
DocumentBuilderFactoryfactory=DocumentBuilderFactory.newInstance();
factory.setIgnoringElementContentWhitespace(true);
//获取DOM解析器
DocumentBuilderbuilder=factory.newDocumentBuilder();
//解析XML文档,并获取该XML文档对应的Document
Documentdoc=builder.parse(newFile("student.xml"));
//获得根节点的方法,getDocumentElement
ElementbookList=doc.getDocumentElement();
//获取根元素所包含的所有“计算机书籍”子元素,
//如果传入*作为参数,可获取所有子元素
NodeListnodeList=bookList.getElementsByTagName("student");
//遍历每个子元素
System.out.println("XML文件开始解析");
//循环输出每一个学生成绩
for(inti=0;i//当前student元素
ElementelmtStudent=(Element)nodeList.item(i);
//利用父子关系获取子节点
NodeListnlCurrent=elmtStudent
.getElementsByTagName("name");
Name=nlCurrent.item(0).getFirstChild().getNodeValue();
//读取到姓名节点的值
System.out.println("姓名:
"+nlCurrent.item(0)
.getFirstChild().getNodeValue());
//利用父子关系获取子节点
nlCurrent=elmtStudent.getElementsByTagName("sex");
//读取到性别节点的值
Sex=nlCurrent.item(0).getFirstChild().getNodeValue();
System.out.println("性别:
"+nlCurrent.item(0)
.getFirstChild().getNodeValue());
//再次获取多个课程节点
nlCurrent=elmtStudent.getElementsByTagName("address");
//读取到性别节点的值
Address=nlCurrent.item(0).getFirstChild().getNodeValue();
System.out.println("地址:
"+nlCurrent.item(0)
.getFirstChild().getNodeValue());
//再次获取多个课程节点
nlCurrent=elmtStudent.getElementsByTagName("phone");
//读取到性别节点的值
Phone=nlCurrent.item(0).getFirstChild().getNodeValue();
System.out.println("电话:
"+nlCurrent.item(0)
.getFirstChild().getNodeValue());
//再次获取多个课程节点
System.out.println("---------------------");
try{
con=DriverManager.getConnection("jdbc:
odbc:
hcy","","");
sql=con.createStatement();
Stringrecode="("+"'"+Name+"'"+","+"'"+Sex+"'"+","
+"'"+Address+"'"+","+Phone+")";
Stringinsert1="INSERTINTOtongxunluVALUES"+recode;
sql.executeUpdate(insert1);
}
finally
{
con.close();
}
}
}
}
3、运行结果
4、初始数据库状态
5、导入数据之后的数据库状态
4、把数据库中数据导出,写成XML
1、Java代码
ConAccess.java
importjava.sql.Connection;
importjava.sql.DriverManager;
importjava.sql.ResultSet;
importjava.sql.SQLException;
importjava.sql.Statement;
/**
*@authorassasa@version1.0@serial
*/
publicclassConAccess{
/**
*
*/
Connectioncon;
Statementst;
ResultSetrs,rs1;
publicConAccess(StringtableName,StringuserName,Stringpassword){
Stringurl="jdbc:
microsoft:
sqlserver:
//localhost:
1433;DatabaseName="
+tableName;
try{
con=DriverManager.getConnection("jdbc:
odbc:
hcy","","");
st=con.createStatement();
}catch(Exceptione){
System.out.print("连接数据库出错了"+e.toString());
e.printStackTrace();//TODO:
handleexception
}
}
publicConnectiongetConnect(){
returncon;
}
publicStatementgetStatement(){
returnst;
}
publicvoidconToSqlClose(){
if(st!
=null){
try{
st.close();
}catch(Exceptione){
//TODO:
handleexception
}
}
if(con!
=null){
try{
con.close();
}catch(SQLExceptione){
//TODO自动生成catch块
e.printStackTrace();
}
}
}
publicstaticvoidmain(String[]args){
ResultSetrs;
Stringsql="select*fromtongxunlu";
ConAccessthisClass=newConAccess("tongxunlu","","");
Statementst=thisClass.getStatement();
try{
rs=st.executeQuery(sql);
while(rs.next()){
System.out.println("name:
"+rs.getString
(1));
System.out.println("sex:
"+rs.getString
(2));
System.out.println("address:
"+rs.getInt(3));
System.out.println("phone:
"+rs.getInt(4));
}
}catch(SQLExceptione){
e.printStackTrace();
}finally{
thisClass.conToSqlClose();
}
}
}
DataToXml.java
importjava.io.BufferedWriter;
importjava.io.FileWriter;
importjava.sql.ResultSet;
importjava.sql.Statement;
publicclassDataToXml{
ConAccesscontosql;
Statementst;
ResultSetrs;
privateStringstrXmlFileName;
publicDataToXml(){
strXmlFileName=newString();
contosql=newConAccess("tongxunlu","","");
}
privatevoidcreateXml(StringstrXml){
StringSQL="select*fromtongxunlu";
strXmlFileName=strXml;
String[]strTemp=newString[4];
try{
st=contosql.getStatement();
rs=st.executeQuery(SQL);
BufferedWriteroutXml=newBufferedWriter(newFileWriter(strXmlFileName));
outXml.write("
xmlversion=\"1.0\"encoding=\"gb2312\"?
>");
outXml.newLine();
outXml.write("");
while(rs.next()){
strTemp[0]=rs.getString
(1);
strTemp[1]=rs.getString
(2);
strTemp[2]=""+rs.getString(3);
strTemp[3]=""+rs.getString(4);
outXml.newLine();
outXml.write("");
outXml.newLine();
outXml.write(""+strTemp[0]+"");
outXml.newLine();
outXml.write(""+strTemp[1]+"");
outXml.newLine();
outXml.write("
"+strTemp[2]+"");
outXml.newLine();
outXml.write(""+strTemp[3]+"");
outXml.newLine();
outXml.write("");
}
outXml.newLine();
outXml.write("");
outXml.flush();
}catch(Exceptione){
e.printStackTrace();
}finally{
contosql.conToSqlClose();
}
}
publicstaticvoidmain(String[]args){
StringxmlName="Newtongxunlu.xml";
DataToXmlthisClass=newDataToXml();
thisClass.createXml(xmlName);
}
}
2、运行结果
Newtongxunlu.xml
xmlversion="1.0"encoding="gb2312"?
>
Jimmey
男
台湾台北-2846
华晨宇
男
湖北武汉1809210
Victorian
女
上海725120
尼坤
男
韩国首尔9218337
5、实验小结
通过这次实验,又重新复习了一下Java编程语言,也对于JDBC连数据库有了更深层次的理解,把数据库中的内容、xml的内容以及Java语言结合到了一起。
在实验过程中也遇到了一些问题,在xml解析过程中,开始的时候是把各文本内容解析出来,但是在连数据库的时候,没办法把记录一条条的输入到数据库中。
所以后来在解析的时候,把内容按照节点一个个解析出来,并且复制给一个个新声明的变量中,这样再后来的导入数据库过程就方便了。
还有就是在传值给数据库的时候,开始忘记了每次传完要关掉连接,否则最后导入的都是第一条记录。
在把数据从数据库中导出生成xml的时候,也要先连接数据库,读取一个个的节点,然后复制给xml中的节点。
通过这次实验,也看到了自己在Java语言运用方面存在的不足,希望以后自己可以多动手操作,提高自己编程能力。