Java生成xml文件的四种方式

Java生成xml文件的四种方式上一篇文章写了xml文件4种读取方式,本篇文章将简介使用四种方式对xml进行写入。

大家好,又见面了,我是你们的朋友全栈君。

绪论

上一篇文章写了xml文件4种读取方式,本篇文章将简介使用四种方式对xml进行写入。

一、Dom写入

import java.io.File;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;

import org.junit.Test;
import org.w3c.dom.Document;
import org.w3c.dom.Element;

public class DomXml { 
   

	@Test
	public void test(){ 
   
		Long start = System.currentTimeMillis();
		createXml();
		System.out.println("运行时间:"+ (System.currentTimeMillis() - start));
	}

	/** * 生成xml方法 */
	public static void createXml(){ 
   
		try { 
   
			// 创建解析器工厂 
			DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
			DocumentBuilder db = factory.newDocumentBuilder();
			Document document = db.newDocument();
			// 不显示standalone="no"
			document.setXmlStandalone(true);
			Element bookstore = document.createElement("bookstore");
			// 向bookstore根节点中添加子节点book
			Element book = document.createElement("book");
			
			Element name = document.createElement("name");
			// 不显示内容 name.setNodeValue("不好使");
			name.setTextContent("雷神");
			book.appendChild(name);
			// 为book节点添加属性
			book.setAttribute("id", "1");
			// 将book节点添加到bookstore根节点中
			bookstore.appendChild(book);
			// 将bookstore节点(已包含book)添加到dom树中
			document.appendChild(bookstore);
			
			// 创建TransformerFactory对象
			TransformerFactory tff = TransformerFactory.newInstance();
			// 创建 Transformer对象
			Transformer tf = tff.newTransformer();
			
			// 输出内容是否使用换行
			tf.setOutputProperty(OutputKeys.INDENT, "yes");
			// 创建xml文件并写入内容
			tf.transform(new DOMSource(document), new StreamResult(new File("book1.xml")));
			System.out.println("生成book1.xml成功");
		} catch (Exception e) { 
   
			e.printStackTrace();
			System.out.println("生成book1.xml失败");
		}		
	}
}

生成结果:
这里写图片描述

二、Dom4j写入

import java.io.File;
import java.io.FileOutputStream;

import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.XMLWriter;
import org.junit.Test;

public class Dom4jXml { 
   

	@Test
	public void test(){ 
   
		Long start = System.currentTimeMillis();
		createXml();
		System.out.println("运行时间:"+ (System.currentTimeMillis() - start));
	}

	/** * 生成xml方法 */
	public static void createXml(){ 
   
		try { 
   
			// 1、创建document对象
			Document document = DocumentHelper.createDocument();
			// 2、创建根节点rss
			Element rss = document.addElement("rss");
			// 3、向rss节点添加version属性
			rss.addAttribute("version", "2.0");
			// 4、生成子节点及子节点内容
			Element channel = rss.addElement("channel");
			Element title = channel.addElement("title");
			title.setText("国内最新新闻");
			// 5、设置生成xml的格式
			OutputFormat format = OutputFormat.createPrettyPrint();
			// 设置编码格式
			format.setEncoding("UTF-8");
			
			
			// 6、生成xml文件 
			File file = new File("rss.xml");
			XMLWriter writer = new XMLWriter(new FileOutputStream(file), format);
			// 设置是否转义,默认使用转义字符
			writer.setEscapeText(false);
			writer.write(document);
			writer.close();
			System.out.println("生成rss.xml成功");
		} catch (Exception e) { 
   
			e.printStackTrace();
			System.out.println("生成rss.xml失败");
		}
	}
}

生成结果:
这里写图片描述

三、jDom写入

import java.io.File;
import java.io.FileOutputStream;

import org.jdom.Document;
import org.jdom.Element;
import org.jdom.output.Format;
import org.jdom.output.XMLOutputter;
import org.junit.Test;

public class JDomXml { 
   
	
	@Test
	public void test(){ 
   
		Long start = System.currentTimeMillis();
		createXml();
		System.out.println("运行时间:"+ (System.currentTimeMillis() - start));
	}

	/** * 生成xml方法 */
	public static void createXml(){ 
   
		try { 
   
			// 1、生成一个根节点
			Element rss = new Element("rss");
			// 2、为节点添加属性
			rss.setAttribute("version", "2.0");			
			// 3、生成一个document对象
			Document document = new Document(rss);
			
			Element channel = new Element("channel");
			rss.addContent(channel);
			Element title = new Element("title");
			title.setText("国内最新新闻");
			channel.addContent(title);
						
			Format format = Format.getCompactFormat();
			// 设置换行Tab或空格
			format.setIndent(" ");
			format.setEncoding("UTF-8");
						
			// 4、创建XMLOutputter的对象
			XMLOutputter outputer = new XMLOutputter(format);
			// 5、利用outputer将document转换成xml文档
			File file = new File("rssNew.xml");
			outputer.output(document, new FileOutputStream(file));

			System.out.println("生成rssNew.xml成功");
		} catch (Exception e) { 
   
			System.out.println("生成rssNew.xml失败");
		}
	}
	
}

生成结果:
这里写图片描述

四、Sax写入

import java.io.File;
import java.io.FileOutputStream;
import java.util.ArrayList;
import java.util.List;

import javax.xml.transform.OutputKeys;
import javax.xml.transform.Result;
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.junit.Test;
import org.xml.sax.helpers.AttributesImpl;

public class SaxXml { 
   

	@Test
	public void test(){ 
   
		List<Book> bList = new ArrayList<Book>();
		Book b = new Book();
		b.setName("冰与火之歌");
		b.setAuthor("乔治马丁");
		b.setId("1");
		b.setLanguage("English");
		b.setPrice("86");
		b.setYear("2014");
		bList.add(b);
		Long start = System.currentTimeMillis();
		createXml(bList);
		System.out.println("运行时间:"+ (System.currentTimeMillis() - start));
	}

	// 生成xml
	public static void createXml(List<Book> bList){ 
   		
		// 1、创建一个SAXTransformerFactory类的对象
		SAXTransformerFactory tff = (SAXTransformerFactory) SAXTransformerFactory.newInstance();
		
		try { 
   
			// 2、通过SAXTransformerFactory创建一个TransformerHandler的对象
			TransformerHandler handler = tff.newTransformerHandler();
			// 3、通过handler创建一个Transformer对象
			Transformer tr = handler.getTransformer();
			// 4、通过Transformer对象对生成的xml文件进行设置
			// 设置编码方式
			tr.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
			// 设置是否换行
			tr.setOutputProperty(OutputKeys.INDENT, "yes");
			// 5、创建一个Result对象
			File f = new File("src/newbooks.xml");
			// 判断文件是否存在
			if(!f.exists()){ 
   
				f.createNewFile();
			}
			Result result = new StreamResult(new FileOutputStream(f));
			// 6、使RESULT与handler关联
			handler.setResult(result);
			
			// 打开document
			handler.startDocument();
			AttributesImpl attr = new AttributesImpl();			
			handler.startElement("", "", "bookstore", attr);
			attr.clear();
			
			for (Book book : bList) { 
   
				attr.clear();
				attr.addAttribute("", "", "id", "", book.getId());
				handler.startElement("", "", "book", attr);
				
				// 创建name
				attr.clear();
				handler.startElement("", "", "name", attr);
				handler.characters(book.getName().toCharArray(), 0, book.getName().length());
				handler.endElement("", "", "name");
				
				// 创建year
				attr.clear();
				handler.startElement("", "", "year", attr);
				handler.characters(book.getYear().toCharArray(), 0, book.getYear().length());
				handler.endElement("", "", "year");
				
				// 创建author
				if(book.getAuthor() != null && !"".equals(book.getAuthor().trim())){ 
   
					attr.clear();
					handler.startElement("", "", "author", attr);
					handler.characters(book.getAuthor().toCharArray(), 0, book.getAuthor().length());
					handler.endElement("", "", "author");
				}
				
				// 创建price
				if(book.getPrice() != null && !"".equals(book.getPrice().trim())){ 
   
					attr.clear();
					handler.startElement("", "", "price", attr);
					handler.characters(book.getPrice().toCharArray(), 0, book.getPrice().length());
					handler.endElement("", "", "price");
				}
				
				// 创建language
				if(book.getLanguage() != null && !"".equals(book.getLanguage().trim())){ 
   
					attr.clear();
					handler.startElement("", "", "language", attr);
					handler.characters(book.getLanguage().toCharArray(), 0, book.getLanguage().length());
					handler.endElement("", "", "language");
				}
				
				handler.endElement("", "", "book");
			}

			handler.endElement("", "", "bookstore");
			// 关闭document
			handler.endDocument();
			System.out.println("生成newbooks.xml成功");
		} catch (Exception e) { 
   
			e.printStackTrace();
			System.out.println("生成newbooks.xml失败");
		}
	}
}

生成结果:
这里写图片描述

五、其它

	/**
	 * 四种方式总结
	 * 
	 * dom基于tree,sax基于事件,JDOM和DOM4J基于底层API
	 * 
	 * dom生成的内容会保存到内存中,方便删除和修改
	 * sax不能修改已经生成的标签
	 * 
	 * 添加JUnit在Libraries选择Add Library中的JUnit即可
	 * 
	 */

(若有什么错误,请留言指正,3Q)

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/162464.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • HBase开发错误记录(一):java.net.UnknownHostException: unknown host: master「建议收藏」

    HBase开发错误记录(一):java.net.UnknownHostException: unknown host: master

    2022年2月2日
  • MySql优化

    MySql优化MySql优化

    2022年4月23日
  • 笔记28-MYSQL约束「建议收藏」

    笔记28-MYSQL约束「建议收藏」DQL:查询语句1.排序查询 *语法:orderby子句 *orderby排序字段1排序方式1,排序字段2排序方式2… *排序方式: *ASC:升序,默认的。 *DESC:降序。 *注意: *如果有多个排序条件,则当前边的条件值一样时,才会判断第二条件。2.聚合函数:将一列数据作为一个整体,进行纵向的计算。 1.count:计算个数 1.一般选择非空的列:主键 2.count(*) 2.max:计算最大值 3.

    2022年9月27日
  • C#中File和FileStream的用法

    C#中File和FileStream的用法在近期的工作过程中发现自己的基础比较薄弱,所以最近在恶补基础知识。下面就对我所学习的File类和FileStream进行简单的总结。1.首先先介绍File类和FileStream文件流1.1File类,是一个静态类,支持对文件的基本操作,包括创建,拷贝,移动,删除和打开一个文件。File类方法的参量很多时候都是路径path。主要提供有关文件的各种操作,在使用时需要引用System.IO命名…

    2022年7月24日
  • Java代码是怎么运行的「建议收藏」

    Java代码是怎么运行的「建议收藏」Java代码有很多运行方式。在开发工具中运行双击jar文件运行在命令行中运行在网页中运行当然,上述运行方式都离不开JRE,&nbsp;也就是Java运行时环境。JRE仅包含Java程序的必须组件,包括Java虚拟机以及Java核心类库…

    2022年7月7日
  • 自动化测试之流量回放技术「建议收藏」

    自动化测试之流量回放技术「建议收藏」流量回放近几年一直是大家热衷讨论的话题,具体的效果智者见智。文章作者也是在技术工程领域有丰富的实践经验,推荐一看。本篇背景是另外一同事朋友,最近在利用流量回放技术应用在服务端接口自动化测试方面,还在各部门全力推进阶段,未来效果暂且不好说,但这部分内容确实各大公司,测试技术大会等等的热词,由于我没参与但我很感兴趣,所以邀请普及一篇,后边应该还会带来实战篇,本公众号坚持原创和干货分享,欢迎长期关注,一同成长,如果你有好的实战分享也欢迎投稿。前言在日常的测试工作中我们或多或少总会遇到下列问题:1)服..

    2022年7月15日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号