引言
xml是我们在项目开发中经常用到的一个东西,我们将一些比较容易改变的东西配置在xml文件里面,方便以后
改变,尤其是我们的系统部署以后。那么我们就需要掌握一门技术来读取xml文件中的内容,在java学习中小编采用
dom4j来是先xml文件的读取,dom4j就是一个读取java的xml文件非常好的API,里面非常多的用法需要我们查询他的
官方文档就就可以了,下面小编分享一下在想中用到的东西。
一、读取数据库的配置信息
将数据库的相关信息配置在xml文件中。
在我们利用dom4j之前,需要在项目中引入dom4j-1.6.1.jar和jaxen-1.1-beta-6.jar两个jar包。
<?xml version="1.0" encoding="UTF-8"?>
<config>
<!-- 链接数据库先关配置 -->
<db-info>
<driver-name>oracle.jdbc.driver.OracleDriver</driver-name>
<url>jdbc:oracle:thin:@127.0.0.1:1521:databaseName</url>
<user-name>userName</user-name>
<password>password</password>
</db-info>
</config>
利用单利模式+dom4j解析xml文件中的内容
package com.bjpowernode.drp.util;
import java.io.InputStream;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import com.sun.org.apache.bcel.internal.generic.NEW;
public class XmlConfigReader {
/**
* 单利模式模式解析sys-config.xml文件
* @param args
*/
//饿汉式(预先加载)
/*private static XmlConfigReader instance = new XmlConfigReader();
private XmlConfigReader(){
}
public static XmlConfigReader getInstance(){
return instance;
}
*/
//懒汉式(延迟加载)
private static XmlConfigReader instance=null;
private JdbcConfig jdbcConfig=new JdbcConfig();
private XmlConfigReader(){
SAXReader reader = new SAXReader();
InputStream in = Thread.currentThread().getContextClassLoader()
.getResourceAsStream("sys-config.xml");
try {
Document doc = reader.read(in);
Element driverNameElt = (Element) doc
.selectObject("/config/db-info/driver-name");
Element urlElt = (Element) doc
.selectObject("/config/db-info/url");
Element userNameElt = (Element) doc
.selectObject("/config/db-info/user-name");
Element passwordElt = (Element) doc
.selectObject("/config/db-info/password");
//设置jdbc相关配置
jdbcConfig.setDriverName(driverNameElt.getStringValue());
jdbcConfig.setUrl(urlElt.getStringValue());
jdbcConfig.setUserName(userNameElt.getStringValue());
jdbcConfig.setPassword(passwordElt.getStringValue());
} catch (DocumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static synchronized XmlConfigReader getInstance(){
if (instance==null) {
instance=new XmlConfigReader();
}
return instance;
}
/**
* 返回jdbc相关配置
* @return
*/
public JdbcConfig getJdbcConfig(){
return jdbcConfig;
}
}
上面的用法几乎在我们每个项目中都会出现,因为这样我们在更换服务器的时候会非常的灵活。
二、读取xml文件信息
有时候我们会遇到这样的需求,需要我们在项目中将一个xml文件中信息解析并且存储在数据库中,那么这时候
就需要我们认真分析xml文件中的层级关系,然后利用dom4j进行解析。
下面是一个测试的xml文件中的内容
<?xml version="1.0" encoding="utf-8"?>
<ACCESOS>
<item>
<SOCIO>
<NUMERO>00045050</NUMERO>
<REPOSICION>0</REPOSICION>
<NOMBRE>MOISES MORENO</NOMBRE>
<TURNOS>
<LU>T1</LU>
<MA>T2</MA>
<MI>T3</MI>
<JU>T4</JU>
<VI>T5</VI>
<SA>T6</SA>
<DO>T7</DO>
</TURNOS>
</SOCIO>
</item>
<item>
<SOCIO>
<NUMERO>00045051</NUMERO>
<REPOSICION>0</REPOSICION>
<NOMBRE>RUTH PENA</NOMBRE>
<TURNOS>
<LU>S1</LU>
<MA>S2</MA>
<MI>S3</MI>
<JU>S4</JU>
<VI>S5</VI>
<SA>S6</SA>
<DO>S7</DO>
</TURNOS>
</SOCIO>
</item>
</ACCESOS>
通过观察我们会发现,上面xml文件的内容如果放在数据库中的话,我们只需要将节点 <SOCIO></SOCIO>中的四
个节点作为我们数据库中的字段名称即可,这样我们通过dom4j解析以后存放在数据库中。
package com.bjprowernode.xml;
import java.io.File;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Iterator;
import java.util.List;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
public class TestXMLImport {
/**
* @param args
*/
public static void main(String[] args) {
String sql="insert into T_XML(NUMERO, REPOSICION, NOMBRE, TURNOS) values (?, ?, ?, ?)";
Connection conn=null;
PreparedStatement pstmt= null;
try {
conn=DbUtil.getConnection();
pstmt = conn.prepareStatement(sql);
Document doc= new SAXReader().read(new File("G:/myeclipseWorkSpace/test_xmlImport/xml/test01.XML"));
List itemList = doc.selectNodes("/ACCESOS/item/SOCIO");
for (Iterator iter=itemList.iterator();iter.hasNext();) {
Element el = (Element)iter.next();
String numero = el.elementText("NUMERO");
String reposicion = el.elementText("REPOSICION");
String nombre = el.elementText("NOMBRE");
List turnosList = el.elements("TURNOS");
StringBuffer sbString = new StringBuffer();
for (Iterator iter1=turnosList.iterator(); iter1.hasNext();) {
Element turnosElt = (Element)iter1.next();
String lu = turnosElt.elementText("LU");
String ma = turnosElt.elementText("MA");
String mi = turnosElt.elementText("MI");
String ju = turnosElt.elementText("JU");
String vi = turnosElt.elementText("VI");
String sa = turnosElt.elementText("SA");
String doo = turnosElt.elementText("DO");
sbString.append(lu + "," + ma + "," + mi + "," + ju + "," + vi + "," + sa + "," + doo);
}
pstmt.setString(1, numero);
pstmt.setString(2, reposicion);
pstmt.setString(3, nombre);
pstmt.setString(4, sbString.toString());
pstmt.addBatch();
}
pstmt.executeBatch();
System.out.println("将XML导入数据库成功!");
} catch (DocumentException | SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
DbUtil.close(pstmt);
DbUtil.close(conn);
}
}
}
上面就完成了一个小demo利用dom4j读取java中的xml文件中的内容,其中很多的用法需要查询API文档,多用一些
到时候自然会熟悉一点。