对于 Java 对 xml 文件的读写,我在网上看了很多版本,结构差不多,根据自己的理解进行了一些总结。
写入数据到 xml 相对比较简单,我总结了以下两种写入方法,仅供参考!

1、dom4j 写入

先看代码

import java.io.PrintWriter;
import java.io.Writer;
import java.util.HashMap;
import java.util.Map;import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;public class XmlCreateAndRead {public static void main(String[] args) {//从数据库读出数据写入xml文件boolean flag = addCompany();//从xml文件读出展示到页面
//      Map<String, Object> company = findByUnitcode("736350492");System.out.println(flag);}/*** 插入对象到xml中* @param form*/public static boolean addCompany() {/** 1. (创建)得到Document* 2. (创建)得到root元素* 3. 要把数据对象转换成Element元素* 4. 把对象的属性插入到root元素中* 5. 回写document*///获取要写入xml文件的数据,可以从数据库获取,这里直接用一个Map对象作为例子Map<String,Object> comMap = new HashMap<String,Object>();comMap.put("UNIT_ID", "89adf979asd");comMap.put("UNIT_CODE", "xiaoCreate");comMap.put("UNIT_NAME", "上市公司");comMap.put("DISPLAYNAME", "北京海淀");try {// 1. 创建DocuembntDocument doc = DocumentHelper.createDocument();// 2. 创建根元素Element root = doc.addElement("city");root.addComment("文档的根city已经创建。");// 添加注释/*  //以下三行为追加数据到 xml 文件时 使用SAXReader reader = new SAXReader(); // 创建解析器Document doc = reader.read("E://temptest//xmlTest.xml"); // 得到DocumentElement root = doc.getRootElement(); //得到根元素*/  /** 3. 完成添加元素,并返回添加的元素!* 向root中添加一个名为company的元素!并返回这个元素*/Element comElement = root.addElement("company");// 设置comElement的属性!comElement.addAttribute("unitId", (String) comMap.get("UNIT_ID"));comElement.addAttribute("unitCode", (String) comMap.get("UNIT_CODE"));comElement.addAttribute("unitName", (String) comMap.get("UNIT_NAME"));comElement.addAttribute("cityArea", (String) comMap.get("DISPLAYNAME"));// 添加comElement的子元素节点!comElement.addElement("unitId").addText((String) comMap.get("UNIT_ID"));comElement.addElement("unitCode").addText((String) comMap.get("UNIT_CODE"));comElement.addElement("unitName").addText((String) comMap.get("UNIT_NAME"));comElement.addElement("cityArea").addText((String) comMap.get("DISPLAYNAME"));// 创建输出流Writer out = new PrintWriter("E:\\temptest\\xmlTest.xml", "utf-8");// 格式化OutputFormat format = new OutputFormat("\t", true);format.setTrimText(true);//去掉原来的空白(\t和换行和空格)!XMLWriter writer = new XMLWriter(out, format);// 把document对象写到out流中。writer.write(doc);out.close();writer.close();return true;} catch(Exception e) {// 把编译异常转换成运行异常!throw new RuntimeException(e);}}
}

执行成功后,打开文件如下图:

注意:新建的 xml 文档有一种编码格式,notpad++在菜单栏的 格式 设置,editplus 可以在菜单栏的 工具-配置用户工具-文件 中设置(https://jingyan.baidu.com/article/e5c39bf58c008c39d76033f6.html);写入的内容有一种编码格式,在 Java 代码中设置

这个例子里,主要有以下功能:
+ 可以直接创建新的 xml 文件,也可以追加数据到已有的 xml 文件,注意第一二步的语句即可。
+ 可以给元素节点增加属性,当然也可以增加子元素节点
+ 注意设置编码格式
+ 如果数据不是一个对象,而是一个对象列表,那么循环增加即可

2、SAX 写入

我看到有的文章说 SAX 只支持解析 xml 文档,但是下面这个例子,我觉得是 SAX 写入的。也许是以前不支持,现在支持了吧。
同样先看例子:

import java.io.*;
import java.util.*;import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.sax.SAXTransformerFactory;
import javax.xml.transform.sax.TransformerHandler;
import javax.xml.transform.stream.StreamResult;import org.xml.sax.SAXException;// SAX写入XML文件
// 参考:http://blog.csdn.net/hairongtian/article/details/7525292
public class SAXWriteTest {// 句柄private TransformerHandler handler = null;// 输出流private OutputStream outStream = null;// 根节点private String rootElement;public SAXWriteTest(String fileName, String rootElement) throws Exception {this.rootElement = rootElement;// 创建句柄,并设置初始参数SAXTransformerFactory fac = (SAXTransformerFactory) SAXTransformerFactory.newInstance();handler = fac.newTransformerHandler();Transformer transformer = handler.getTransformer();transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");transformer.setOutputProperty(OutputKeys.INDENT, "yes");transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "no");outStream = new FileOutputStream(fileName);handler.setResult(new StreamResult(outStream));System.out.println("初始化成功");}public void start() throws Exception {handler.startDocument();handler.characters("\n".toCharArray(), 0, "\n".length());//给子元素节点添加缩进handler.startElement("", "", rootElement, null);System.out.println("文档开始...");}// 这个函数是最重要的,它可以控制各个细节:是否写入属性值,文本值又是多少等等public void write(HashMap<String, String> map, String element)throws SAXException {handler.characters("\n  ".toCharArray(), 0, "\n  ".length());//给子元素节点添加缩进handler.startElement("", "", element, null);Iterator<String> it = map.keySet().iterator();while (it.hasNext()) {String key = (String) it.next();String value = map.get(key);handler.characters("\n    ".toCharArray(), 0, "\n    ".length());//给子元素节点添加缩进handler.startElement("", "", key, null);handler.characters(value.toCharArray(), 0, value.length());handler.endElement("", "", key);}handler.characters("\n  ".toCharArray(), 0, "\n  ".length());//给子元素节点添加缩进handler.endElement("", "", element);System.out.println("写入元素成功!");}public void end() throws Exception {handler.endElement("", "", rootElement);handler.endDocument();outStream.close();System.out.println("文档结束!");}public static void main(String[] args) throws Exception {SAXWriteTest xml = new SAXWriteTest("E:\\temptest\\student.xml", "students");xml.start();HashMap<String, String> map = new HashMap<String, String>();map.put("id", "20050505");map.put("name", "zhaobenshan");map.put("age", "21");map.put("classes", "Act051");xml.write(map, "student");map = new HashMap<String, String>();map.put("id", "20050506");map.put("name", "songdandan");map.put("age", "20");map.put("classes", "Act052");xml.write(map, "student");xml.end();}
}

执行成功后,打开文件如下图:

这个例子也是前辈的,我主要是给子元素节点添加了缩进,相当于格式化了一下
+ 例子中也是一个对象一个对象写入的,如果需要写入对象列表,则循环即可
+ 这个例子是新建一个 xml 文档,追加的功能待研究

Java 操作 xml 文件之写入相关推荐

  1. JAVA操作xml文件

    参考:java操作xml方法,总有适合你的 XML技术在Java开发中的应用 1.简介 xml: extensible Markup Language 1.1使用场景: 不同的系统之间交互时使用xml ...

  2. Java操作XML文件及转义字符

    XML转义字符: eg: 实体必须以符号"&"开头,以符号";"结尾. 转载1: 目录 一.使用DOM4j进行XML的DOM解析 1.1.使用DOM4j ...

  3. java解析xml文件并写入Excel表

    解析xml文件并写入Excel表 类似于如下格式的xml数据,解析之后将数据写入Excel中 <?xml version="1.0" encoding="UTF-8 ...

  4. java操作XML文件--读取内容

          先把问题贴出来:编写一个可以解析xml及修改xml内容的工具类       由于我以前做过Android应用程序开发,之前也解析过xml文件,所以,这道题不是很难,这篇文章我先解决第一个问 ...

  5. Java操作XML文件 dom4j 篇【转】

    加入包 1 //文件包 2 import java.io.ByteArrayOutputStream; 3 import java.io.File; 4 import java.io.FileWrit ...

  6. java操作xml文件--修改节点

          上一篇文章我介绍了SAX方法解析XML文件的过程,这篇文章讲解的内容是利用DOM方法修改XML文件的节点内容.       下面依然是首先贴出XML文件: <?xml version ...

  7. Java读写xml文件操作(3W)what why how where

    一. what 1.xml是一种可扩展的标记语言. 2.标记语言:是一种通过标签来描述数据的一门语言. 3.可扩展:标签的名字可以自己定义. 4.可以说xml文件是由标签组成,而标签是可以自定义的. ...

  8. Java生成XML文件与XML文件的写入

    转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6651643.html  既然能在代码中解析XML文档获取数据,当然也能通过代码动态生成XML文档了. 与解析X ...

  9. 1万条xml文件的写入,附加杂类知识

    写这段代码目的:这次需要将集搜客爬取到的10482个XML文件逐个写入TXT文件中,将xml中的标题结点的值作为TXT文件的名字,XML文件结构如下 话不多说,我们放代码: package xmlTo ...

最新文章

  1. 【JS】两种计时器/定时器
  2. 郝斌数据结构教程 送给数据结构新手的福利
  3. 自动化运维-Ansible (第三部:Playbook 介绍)
  4. 解决自动更新时 系统提示“某些设置由你的系统管理员管理”的方法
  5. 苹果汽车自动驾驶又出新信号:正与多家激光雷达供应商谈判
  6. 力扣404. 左叶子之和(JavaScript)
  7. java关键字保留字_Java这个关键字
  8. [Lydsy1805月赛]对称数 BZOJ5361
  9. Linux tcp同时多个连接,我的linux tcp server最多只能同时进行10个TCP请求,其余的都在等待了,如何让所有的连接都同时进行?...
  10. sql生成(查询数据的存储过程)代码的存储过程
  11. python tab键自动补全怎么用_Python语言之使用tab键自动补全
  12. 二元一次方程有唯一解的条件_线性方程组在什么时候有唯一解/无穷个解/无解?...
  13. 家电电子行业内卷严重,你还觉得单片机没用吗
  14. C#篇-值类型和引用类型
  15. 使用jQuery填充tbody时,填充了两倍数据
  16. robotframework 中ride数据丢失且关键词无法高亮
  17. C#把文字放到图片上
  18. 解决微信登录Emoji表情昵称乱码问题
  19. HTML进阶--段落标签P --------16岁的小前端
  20. 网站app被劫持怎么办?HTTPDNS阿里云域名防劫持, DNSPod 移动解析服务 D+

热门文章

  1. 自己做量化交易软件(5)通通量化中创作的布林指标BOLL线
  2. n个小球放入m个盒子中_M个球放入N个盒子的放法
  3. lua与python_动态大比拼Python、Lua和Ruby
  4. jpa SqlQuery casewhen用法
  5. 【学习必看】PHP学习路线图
  6. 哈希查找(根据电话号查找)
  7. Fedora 安装 Apache HTTP Server
  8. 系统滴答及Systick定时器
  9. **深拷⻉浅拷⻉的区别?如何实现⼀个深拷⻉?**
  10. 如何做一份清晰易懂的软件设计?