当前位置: 首页 > >

JAVA中的XML文件--文件写入

发布时间:

DOMSAX方式是JAVA官方提供的方式,可以生成一个XML文件来存储信息,DOM4JJDOM是非官方的方式,可以生成一个RSS文件。



1 应用DOM方式写入XML
1.1 准备工作

和之前用DOM方式读取XML文件相同,需要创建一个DocumentBuilder对象:

DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();

因为需要生成一个XML文件,所以不需要用parse()方法,直接用newDocument()方法获取一个Document对象 ,它就代表了我们要放在xml文件中的DOM树:

Document document = db.newDocument();
1.2 创建元素、属性及元素中的文本

用createElement(String ElementName)方法创建一个元素,并通过appendChild(Element e)方法给它添加子元素:

//创建根元素
Element school = document.createElement("school");
//将根元素添加到document中去
document.appendChild(school);
//创建一个元素,并把它追加到根元素的子元素
Element student = document.createElement("student");
school.appendChild(student);

给元素设置属性,使用setAttribute(name, value)方法:

student.setAttribute("id", "0001");

通过setTextContext(String)方法给元素添加文本:

name.setTextContext("王明");

备注:
1. Document和Element对象中都有appendChild()方法,前者用来添加根元素,且只能使用一次,否则会产生错误(HIERARCHY_REQUEST_ERR: 尝试在不允许的位置插入节点),后者用来给调用它的元素添加子元素。


1.3 创建XML文件

创建TransformerFactory对象通过newInstance(),然后创建Transformer对象通过TransformerFactory对象的newTransformer()方法(注意和DocumentBuilder(Factory)对比):

TransformerFactory tff = TransformerFactory.newInstance();
Transformer tf = tff.newTransformer();

Transformer对象中的方法transform(Source , stream)方法可以将我们创建好的Document对象转化为XML文件:

tf.transform(new DOMSource(document),new streamResult(new File("students.xml");

可以看到这样创建的xml文件所有的都在一行,可以使用tf的setOutProperty()方法来设置输出的属性:

tf.setOutputProperty(OutputKeys.INDENT,"yes");

2 应用SAX方式写入XML
2.1 准备工作

创建一个SAXTransformerFactory类的对象:

SAXTransformerFactory stff = (SAXTransformerFactory)SAXTransformerFactory.newInstance();

通过SAXTransformerFactory对象的newTransformerHandler()方法创建TransformerHandler的实例:

TransformerHandler handler = stff.newTransformerHandler();

通过handler对象创建一个transformer对象:

Transformer transformer = handler.getTransformer();

通过setOutputProperty()方法设置编码格式、是否换行等属性:

transformer.setOutputProperty(OutputKeys.ENCODING, "utf-8");
transformer.setOutputProperty(OutputKeys.INDENT, "yes");

创建一个Result对象,通过它去进行文件的创建和输出流的编写,并且使其与handler关联:

Result result = new StreamResult(new fileOutputStream(new File("students2.xml")));
handler.setResult(result);
2.2 生成子元素及属性

利用handler对象进行xml文件内容的编写:

通过startDocument()方法打开document(),并添加元素通过startElement(String url,String localName,String qName,String attributes)方法(其中前两个(与命名空间有关)可以为空,后两个为元素名和元素属性集合):

handler.startDocument();
handler.startElement("","","school",attr);//attr参数在下一步介绍

在上一步中需要传递Attributes,创建一个AttributesImpl对象,通过addAttribute(String url,String localName,String qName,String type,String value):

AttributeImpl attr = new AttributeImpl();
attr.addAttribute("","","id","","0001");
给元素添加文本,通过character(

按上述,会发现生成的XML文件里并没有内容,需要调用endDocument()结束,同时,在结束前必须调用endElement(String url,String localName,String qName)方法结束每个元素(给元素添加结束标志):

handler.endElement("","","school");
handler.endDocument();

备注:


    注意每个元素的startElement和endElement方法的嵌套和主子元素对应,否则XML文件中会出现错误注意开始和结束调用startDocument和endDocument方法transformer设置属性必须在handler.setResult(result)前面写,否则设置的属性不会生效


3 应用DOM4J方式写入XML
3.1 RSS简介

简易信息聚合(聚合内容)是一种RSS基于XML标准,在互联网上被广泛采用的内容包装和投递协议。RSS(Really Simple Syndication)是一种描述和同步网站内容的格式,是使用最广泛的XML应用


3.2 生成RSS元素及属性

通过DocumetHelper下的createDocument()方法获取一个Document实例(代表整个XML文件):

Document document = DocumentHelper.createDocument();

通过Document中的addElement(String)方法创建根元素,通过addAttribute(String,String)方法给根元素添加属性:

Element rss = document.addElement("rss");
rss.addAttribute("version","2.0");

在某个元素中创建子元素通过Element中的addElement(String)方法,并通过setText(String)方法向元素中添加文本内容:

Element channel = rss.addElement("channel");
channel.setText("CSDN");

3.3 生成XML文件

通过XMLWriter的write()方法创建,利用XMLWriter的Output参数的构造方法来创建XMLWriter实例:

File file = new File("rssnews.xml");
XMLWriter writer = new XMLWriter(new FileOutputStream(file));

设置XML文件格式,通过OutputFormat的createPrettyPrint()方法设置一个比较“漂亮”的格式(缩进和换行),通过setEncoding(String encoding)方法设置编码格式:

OutputForm format = OutputFormat.createPrettyPrint();
format.setEncoding("GBK");

这样将format传给XMLWriter的构造方法,修改上一步的代码,使用另一个构造方法:

XMLWriter writer = new XMLWriter(new FileOutputStream(file),format);

处理转义字符(如尖括号“<”):

writer.setEscapeText(false);

该方法的默认参数值为 true,代表转义,所以 false 代表不转义。

将document写入创建好的xml文件:

writer.write(document);

备注:
1. 注意抛出的异常;
2. 以上所使用的类来自org.dom4j包下。



4 应用JDOM方式解析XML

生成根元素,并为其添加属性:

Element rss = new Element("rss");
rss.setAttribute("version","2.0");

通过传入根元素的构造方法生成一个document对象:

Document document = new Document(rss);

给元素添加子元素,并给子元素添加文本内容

Element channel = new Element("channel");
rss.addContent(channel);
channel.setText("CSDN");

创建一个XMLOutputer对象,将document转换成XML文档:

XMLOutputter outputter = new XMLOutputter();
outputter.output(document , new FileOutputStream(new File("rssnews.xml")));

需要在XML中进行格式设置,可以给XMLOutputter()传递Format对象进行设置换行缩进、编码格式等:

Format format = Format.getCompactFormat();
format.setIndent("");



友情链接: