使用w3c生成xml文件

本文介绍使用w3c标准生成的xml文档,可以使用工具类中提供的方法任意组装数据你要生成的数据。关于里面的jar包。作者使用的是jdk1.8,在rt.jar中,所以,此处不需要添加jar包。根据自己的使用情况而定。关于解析xml可以查看同类文章使用w3c解析xml文档废话不多说,以下是工具类。

注:以下工具类是考虑到各种异常,封装好的工具类,如果使用的过程中有疑惑可以将整个工具类拷贝,然后根据示例去生成你的xml,如果单纯的拷贝其中的某个方法,则可能会出现问题,因为工具类之间互有关联性。建议直接拷贝使用。

工具方法类

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.OutputStream;

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

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;

public class CreateXmlFile {

	/**
	 * 将指定的Node写到指定的OutputStream流中。
	 * 
	 * @param encoding
	 *            编码。
	 * @param os
	 *            OutputStream流。
	 * @param node
	 *            Node节点。
	 * @throws TransformerException
	 *             如果转换过程中发生不可恢复的错误时,抛出此异常。
	 */
	private static void writeXml(OutputStream os, Node node, String encoding)
			throws TransformerException {
		TransformerFactory transFactory = TransformerFactory.newInstance();
		Transformer transformer = transFactory.newTransformer();
		transformer.setOutputProperty("indent", "yes");
		transformer.setOutputProperty(OutputKeys.ENCODING, encoding);

		DOMSource source = new DOMSource();
		source.setNode(node);
		StreamResult result = new StreamResult();
		result.setOutputStream(os);

		transformer.transform(source, result);
	}

	/**
	 * 创建文档之前,现将document创建出来,并且将document的根节点创建出来
	 * 
	 * @return document对象
	 * @throws ParserConfigurationException
	 */
	public static Document createDocument() throws ParserConfigurationException {
		// 定义工厂 API,使应用程序能够从 XML 文档获取生成 DOM 对象树的解析器
		DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
		// 定义 API, 使其从 XML 文档获取 DOM 文档实例。使用此类,应用程序员可以从 XML 获取一个 Document
		DocumentBuilder builder = factory.newDocumentBuilder();
		// Document 接口表示整个 HTML 或 XML 文档。从概念上讲,它是文档树的根,并提供对文档数据的基本访问
		return builder.newDocument();
	}

	/**
	 * 向document添加根节点
	 * 
	 * @param document
	 * @param rootName
	 *            根节点的名称
	 * @return 根节点对应的element对象
	 */

	public static Element rootElement(Document document, String rootName) {
		Element element = document.createElement(rootName);
		document.appendChild(element);
		return element;
	}

	/**
	 * 创建一个element
	 * 
	 * @param document
	 * @param elementName
	 *            名称
	 * @return 返回element对象
	 */
	public static Element docCreateElement(Document document, String elementName) {
		return document.createElement(elementName);
	}

	/**
	 * 向父级element添加子element
	 * 
	 * @param document
	 * @param parentElement
	 *            父级element对象
	 * @param childName
	 *            子级element对象的<b>名称</b>
	 * @return 子级element对象
	 */
	public static void parentAddChild(Document document, Element parentElement,
			Element childName) {
		parentElement.appendChild(childName);
	}

	/**
	 * 向最底层的element添加元素属性
	 * 
	 * @param document
	 * @param element
	 *            操作的对象
	 * @param attrName
	 *            属性名称
	 * @param attrValue属性对应的值
	 */
	public static void addAttrtoElement(Document document, Element element,
			String attrName, String attrValue) {
		Element name = document.createElement(attrName);
		name.appendChild(document.createTextNode(attrValue));
		element.appendChild(name);
	}

	/**
	 * 将Document输出到指定的文件中。
	 * 
	 * @param fileName
	 *            文件名。
	 * @param node
	 *            要保存的对象。
	 * @param encoding
	 *            保存的编码。
	 * @throws FileNotFoundException
	 *             指定的文件名不存在时,抛出此异常。
	 * @throws TransformerException
	 *             如果转换过程中发生不可恢复的错误时,抛出此异常。
	 */
	public static void saveXml(final String fileName, final Node node,
			String encoding) throws FileNotFoundException, TransformerException {
		writeXml(new FileOutputStream(fileName), node, encoding);
        }	
}

使用方法

public static void main(String[] args) {
		try {
			Document doc = CreateXmlFile.createDocument();

			// 此处创建是向document中添加根目录

			Element root = CreateXmlFile.rootElement(doc, "persons1");
			// 创建一个的element节点名称为person2
			Element ele = CreateXmlFile.docCreateElement(doc, "person2");
			// 向根目录中添加子节点(此方法可以重复使用,不断向你需要添加的父节点添加子节点)
			XmlUtils.parentAddChild(doc, root, ele);
				for (int i = 0; i < 3; i++) {
					Element ele1 = CreateXmlFile.docCreateElement(doc, "person3");
					CreateXmlFile.addAttrtoElement(doc, ele1, "age", "23-" + i);
					CreateXmlFile.addAttrtoElement(doc, ele1, "name", "张三-" + i);
					// 将组装好的属性对象添加到他的上级节点中
					CreateXmlFile.parentAddChild(doc, ele, ele1);
				}
				// 保存到指定的文件夹中
				CreateXmlFile.saveXml("D:/dir/files/1502767036836/aaaaa.xml", root,
						"utf-8");
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

最终生成的文件

<?xml version="1.0" encoding="utf-8"?>
<persons1> 
  <person2> 
    <person3> 
      <age>23-0</age>  
      <name>张三-0</name> 
    </person3>  
    <person3> 
      <age>23-1</age>  
      <name>张三-1</name> 
    </person3>  
    <person3> 
      <age>23-2</age>  
      <name>张三-2</name> 
    </person3> 
  </person2> 
</persons1>

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值