java积累——dom4j读取xml文件


   引言


   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文档,多用一些


到时候自然会熟悉一点。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 14
    评论
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

g-Jack

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值