采用技术:dom4j

需要jar包:dom4j-1.6.1.jar

主类如下----

public class dom4jTestXML {
 /**
  *
  * 方法描述:读取XML文件示例 备 注: </br>
  * 创 建 人: bo.gaobo</br>
  * 修改日期: @2013-8-20</br>
  */
 public static void readXML() {
  SAXReader sr = new SAXReader();// 获取读取xml的对象。
  try {
   Document doc = sr.read("src/Noname1.xml");// 得到xml所在位置。然后开始读取。并将数据放入doc中
   Element el_root = doc.getRootElement();// 向外取数据,获取xml的根节点。
   System.out.println("根节点:" + el_root.getName());
   Iterator it = el_root.elementIterator();// 从根节点下依次遍历,获取根节点下所有子节点
   while (it.hasNext()) {// 遍历子节点
    Object o = it.next();
    Element el_row = (Element) o;
    String str = el_row.getText();
    Iterator it_row = el_row.elementIterator();
    while (it_row.hasNext()) {
     Element el_ename = (Element) it_row.next();
     System.out.println(el_ename.getName() + "="
       + el_ename.getData());
    }
   }
  } catch (DocumentException e) {
   e.printStackTrace();
  }
 }

/**
  *
  * 方法描述:写入XML文件并存储 备 注: </br>
  * 创 建 人: bo.gaobo</br>
  * 修改日期: @2013-8-20</br>
  */

public static void writeToXML() {
  Row row1 = new Row();
  row1.setCo("co_1");
  row1.setComm("comm_1");
  row1.setDepno("depno_1");
  row1.setEmpno("empno_1");
  row1.setEname("ename_1");
  row1.setMgr("mgr_1");
  row1.setHiredate("2012-03-29");
  row1.setJob("job_1");
  row1.setSal("sal_1");

Document document = DocumentHelper.createDocument();
  Element root = document.addElement("ROWDATA");
  Element row = root.addElement("ROW");
  row.addElement("CO").addText(row1.getCo());
  row.addElement("EMPNO").addText(row1.getEmpno());
  row.addElement("ENAME").addText(row1.getEname());
  row.addElement("JOB").addText(row1.getJob());
  row.addElement("MGR").addText(row1.getMgr());
  row.addElement("HIREDATE").addText(row1.getHiredate());
  row.addElement("SAL").addText(row1.getSal());
  row.addElement("COMM").addText(row1.getComm());
  row.addElement("DEPTNO").addText(row1.getDepno());

String filePath = "D:/xmlTest/" + getNowDay() + "/";
  String fileName = "row1.xml";
  
  String xmlStr = "";
  xmlStr = document.asXML();
  try {
   Document dcmt = DocumentHelper.parseText(xmlStr);
   saveDocumentToFile(dcmt, filePath, fileName, true, "UTF-8");
  } catch (DocumentException e) {
   e.printStackTrace();
  }

}

public static String getNowDay() {
  SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd");
  return format.format(new Date());
 }

/**
  * 方法描述:<b>存储完整XML文件.</b></br>
  * 备 注: </br>
  * 创 建 人: zyl</br>
  * 创建日期:2013-3-18</br>
  *
  * @param document
  * @param xmlFilePath
  * @param xmlFileName
  * @param isTrimText
  * @param xmlEncoding
  */
 public static void saveDocumentToFile(Document document,
   String xmlFilePath, String xmlFileName, boolean isTrimText,
   String xmlEncoding) {
  if (document == null || xmlFilePath == null || "".equals(xmlFileName)) {
   return;
  }

File file = new File(xmlFilePath);
  // 判断路径是否存在,不存在创建
  if (!file.exists()) {
   file.mkdirs();
  }
  // 保存文件
  OutputFormat format = null;

if (isTrimText) {
   format = OutputFormat.createPrettyPrint();
  } else {
   format = DomXmlOutputFormat.createPrettyPrint();// 保留xml属性值中的回车换行
  }

if (xmlEncoding != null) {
   format.setEncoding(xmlEncoding);// GBK
  } else {
   format.setEncoding("UTF-8");// UTF-8
  }

try {
   org.dom4j.io.XMLWriter xmlWriter = new org.dom4j.io.XMLWriter(
     new FileOutputStream(xmlFilePath + xmlFileName), format);// FileOutputStream可以使UTF-8生效
   xmlWriter.write(document);
   xmlWriter.close();
  } catch (IOException e) {
   System.out.println("保存XML异常:" + e.getMessage());
   System.out.println("正在保存的文件名是:" + xmlFileName);
  }
  // 存到文件中结束
 }

public static void main(String args[]) {
//  readXML();
  writeToXML();
 }

}

class Row {

private String co;
 private String empno;
 private String ename;
 private String job;
 private String mgr;
 private String hiredate;
 private String sal;
 private String comm;
 private String depno;

public String getCo() {
  return co;
 }

public void setCo(String co) {
  this.co = co;
 }

public String getEmpno() {
  return empno;
 }

public void setEmpno(String empno) {
  this.empno = empno;
 }

public String getEname() {
  return ename;
 }

public void setEname(String ename) {
  this.ename = ename;
 }

public String getJob() {
  return job;
 }

public void setJob(String job) {
  this.job = job;
 }

public String getHiredate() {
  return hiredate;
 }

public void setHiredate(String hiredate) {
  this.hiredate = hiredate;
 }

public String getSal() {
  return sal;
 }

public void setSal(String sal) {
  this.sal = sal;
 }

public String getComm() {
  return comm;
 }

public void setComm(String comm) {
  this.comm = comm;
 }

public String getDepno() {
  return depno;
 }

public void setDepno(String depno) {
  this.depno = depno;
 }

public String getMgr() {
  return mgr;
 }

public void setMgr(String mgr) {
  this.mgr = mgr;
 }
}

主类结束----

辅助类,重写了createPrettyPrint()方法----

import org.dom4j.io.OutputFormat;
/**
 * 类 描 述:<b>dom4j输出格式化.</b></br>
 * 备      注:  </br>
 * 创  建   人: yanlei.zhao</br>
 * 创建日期: 2011-12-1</br>
 */
public class DomXmlOutputFormat extends OutputFormat { 
 /**
  * 方法描述:<b>dom4j输出格式化..</b></br>
  * 备          注: 保存Document到xml文件时,xml属性中的回车换行需要保留,
  *    可是发现在使用过程中发现dom4j自动把回车换行去掉了。特写此类</br>
  * 创  建   人: yanlei.zhao</br>
  * 创建日期: 2011-12-1</br>
  * @return
  */
    public static OutputFormat createPrettyPrint() {  
        OutputFormat format = new OutputFormat();  
        format.setIndentSize(2);  
        format.setNewlines(true);  
        format.setTrimText(false); // 覆盖 父类的  format.setTrimText(true); 
        format.setPadText(true);

return format;  
    }

}

辅助类结束----

示例XML文件----

<?xml version="1.0" ?>
<ROWDATA>
<ROW>
  <C0>1</C0>
  <EMPNO>7891</EMPNO>
  <ENAME>sdffff</ENAME>
  <JOB>job</JOB>
  <MGR>mgr</MGR>
  <HIREDATE>2010-1-1</HIREDATE>
  <SAL>5000.00</SAL>
  <COMM>1000.00</COMM>
  <DEPTNO>deptno</DEPTNO>
</ROW>
<ROW>
  <C0>2</C0>
  <EMPNO>7369</EMPNO>
  <ENAME>SMITH</ENAME>
  <JOB>CLERK</JOB>
  <MGR>7902</MGR>
  <HIREDATE>1980-12-17</HIREDATE>
  <SAL>800.00</SAL>
  <COMM>comm</COMM>
  <DEPTNO>20</DEPTNO>
</ROW>
</ROWDATA>

示例文件结束----

Java读写XML代码示例的更多相关文章

  1. Java 读写XML文件 API--org.dom4j

    om4j是一个Java的XML API,类似于jdom,用来读写XML文件的.dom4j是一个十分优秀的JavaXML API,具有性能优异.功能强大和极其易使用的特点,同时它也是一个开放源代码的软件 ...

  2. Java 读写XML

    package dome4jTest; import java.io.FileWriter; import java.io.IOException; import java.net.URL; impo ...

  3. JNI Java调用C代码 示例

    Activity public class MainActivity extends ListActivity {     static {         System.loadLibrary(&q ...

  4. java 管道流代码示例

    import java.io.IOException;import java.io.PipedInputStream;import java.io.PipedOutputStream; public ...

  5. C# 读写XML文件示例

    using System; using System.Collections.Generic; using System.Text; using System.Configuration; using ...

  6. Java连接ActiveMQ代码示例(Producer和Consumer)

    import org.apache.activemq.ActiveMQConnection; import org.apache.activemq.ActiveMQConnectionFactory; ...

  7. java基础之----java常见异常及代码示例

    概述 java中有两种错误类型,一个是Exception,一个是Error,都在java.lang包下,一般来说程序中的try...catch捕获的是Exception类型的异常,而Error类型的错 ...

  8. 使用XStream注解实现Java对象与XML互相转换的代码示例

    本文记录一下使用xstream这个api的注解特性对Java对象与XML字符串相互转换的一些代码示例.    我们很多人都处理过XML文件,也有很多非常成熟的第三方开源软件.如:jdom.dom4j等 ...

  9. JAVA对XML文件的读写(有具体的代码和解析

    XML 指可扩展标记语言(EXtensible Markup Language),是独立于软件和硬件的信息传输工具,应用于 web 开发的许多方面,常用于简化数据的存储和共享. xml指令 处理指令, ...

随机推荐

  1. Identity Server 4 从入门到落地(九)—— 客户端User和Role的解析

    前面的部分: Identity Server 4 从入门到落地(一)-- 从IdentityServer4.Admin开始 Identity Server 4 从入门到落地(二)-- 理解授权码模式 ...

  2. 利用Windbg分析Magicodes.IE一次错误编写导致内存剧增

    由于这近一年时间一直忙于写书和工作,一直没有水文,但是近期有几位朋友使用我们的Magicodes.IE反馈在导出过程中内存暴涨...好吧,不管怎样,不能苦了我们朋友,接下来我们通过windbg来看一下 ...

  3. 5、Redis五大基本数据类型——String类型

    一.Redis支持数据类型简介 Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合). 二.String类 ...

  4. C++STL标准库学习笔记(二)二分查找

    二.STL中的二分查找算法 1.binary_search 2.lower_bound 3.upper_bound 记得#include<algorithm>! 前言: 在这个笔记中,我把 ...

  5. CF53C Little Frog 题解

    Content 有一只小青蛙想游历 \(n\) 块土堆,它现在在 \(1\) 号土堆上,每次可以跳跃任意距离到达另外的一个土堆.它想让每次跳跃的距离都不相等,试找到这样的一个方案. 数据范围:\(1\ ...

  6. LuoguB2075 幂的末尾 题解

    Content 求 \(a^b\) 的末三位. 数据范围:\(1\leqslant a\leqslant 100\),\(1\leqslant b\leqslant 10^4\). Solution ...

  7. LuoguB2104 矩阵加法 题解

    Content 给定两个 \(n\times m\) 的矩阵 \(A,B\),求 \(C=A+B\). 数据范围:\(1\leqslant n,m\leqslant 100\). Solution 我 ...

  8. LuoguP6861 [RC-03] 难题 题解

    Update \(\texttt{2020.10.21}\) 删除了不需要的 \(n=1\) 的特判,并在符号与字母之间添加了空格. Content 给定一个数 \(n\),试找到一对数 \(a,b( ...

  9. c++设计模式概述之模板方法

    代码写的不够规范,目的是为了缩短文章篇幅,实际中请不要这样做. 1.概述 如其名,模板,也就是说,有一个已经做好的模板把框架做好了,剩下的,只需要我们将内容填充到模板下. 例如修房屋,框架结构搭建完成 ...

  10. ubuntu下载源码clang + llvm+lldb 编译+安装

    [本文可能涉及到Ubuntu安装以下工具:] A.g++ B.gcc C.make D.cmake E.clang(10.0.1)(必须) F.llvm(10.0.1)(必须) G.lldb(10.0 ...