java积累——dom4j读取xml文件

本文涉及的产品
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: 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文档,多用一些到时候自然会熟悉一点。

目录
相关文章
|
3月前
|
XML JavaScript Java
【JAVA XML 探秘】DOM、SAX、StAX:揭秘 Java 中 XML 解析技术的终极指南!
【8月更文挑战第25天】本文详细探讨了Java中三种主流的XML解析技术:DOM、SAX与StAX。DOM将XML文档转换为树状结构,便于全方位访问和修改;SAX采取事件驱动模式,适用于大型文件的顺序处理;StAX则兼具DOM和SAX的优点,支持流式处理和随机访问。文中提供了每种技术的示例代码,帮助读者理解如何在实际项目中应用这些解析方法。
153 1
|
1月前
|
分布式计算 资源调度 Hadoop
大数据-01-基础环境搭建 超详细 Hadoop Java 环境变量 3节点云服务器 2C4G XML 集群配置 HDFS Yarn MapRedece
大数据-01-基础环境搭建 超详细 Hadoop Java 环境变量 3节点云服务器 2C4G XML 集群配置 HDFS Yarn MapRedece
68 4
|
1月前
|
XML JavaScript Java
java与XML文件的读写
java与XML文件的读写
23 3
|
3月前
|
XML 存储 JavaScript
在 Java 中如何将 ArrayList 转换为 XML
【8月更文挑战第23天】
26 3
|
3月前
|
C# 前端开发 UED
WPF数据验证实战:内置控件与自定义规则,带你玩转前端数据验证,让你的应用程序更上一层楼!
【8月更文挑战第31天】在WPF应用开发中,数据验证是确保输入正确性的关键环节。前端验证能及时发现错误,提升用户体验和程序可靠性。本文对比了几种常用的WPF数据验证方法,并通过示例展示了如何使用内置验证控件(如`TextBox`)及自定义验证规则实现有效验证。内置控件结合`Validation`类可快速实现简单验证;自定义规则则提供了更灵活的复杂逻辑支持。希望本文能帮助开发者更好地进行WPF数据验证。
103 0
|
Java 大数据 Apache
|
Java Windows 移动开发
|
Java
JAVA读取文件的几种方法
喜欢的朋友可以关注下,粉丝也缺。 InputStreamReader+BufferedReader读取字符串 InputStreamReader 将字节流转换为字符流。
1289 0
|
Java Windows 移动开发
[Java]读取文件方法大全
1、按字节读取文件内容2、按字符读取文件内容3、按行读取文件内容 4、随机读取文件内容  public class ReadFromFile {    /**     * 以字节为单位读取文件,常用于读二进制文件,如图片、声音、影像等文件。
680 0
下一篇
无影云桌面