使用JAXP DOM修改XML文档教程
作者:ade 日期:2010-11-28
本文讲解使用JAXP(Java API for XML Processing) DOM API读取上一讲(使用JAXP DOM读取XML文档教程)中的books.xml里的内容,添加一个book元素,然后保存到另一个文件里.看完本文还不清楚的,请看视频教程.视频中没有写JAXP DOM,直接说是Java dom api,一回事,不说JAXP显得不高深.呵呵.
配套视频教程下载地址为:
使用JAXP DOM修改XML文档[视频教程]下载地址1
思路与步骤:
/*1.获得Document实例,操纵XML文件的入口,同上一讲.
2. 添加一个book元素到DOM树,意味着新建三个元素:book,title,author,并设置title,author的text内容,代码如下:*/
Element book = doc.createElement("book");
Element title = doc.createElement("title");
Element author = doc.createElement("author");
title.setTextContent("谁绑架了中国的父母");
author.setTextContent("you know");
/*3. 将两个孩子节点添加到book元素下,将book元素添加到根元素下*/
book.appendChild(title);
book.appendChild(author);
Element root = doc.getDocumentElement();
root.appendChild(book);
/*4. 新的DOM树已经在内存中形成,问题就是如何将之写到文件里
Java提供了Transformer类来完成这个工作,该类通过TransformerFactory工厂类获得,TransformerFactory由自己newInstance出来。
5. 如果要保留原文件中的dtd声明,要注意先调用该类的ts.setOutputProperty()方法,调用示范:
ts.setOutputProperty(javax.xml.transform.OutputKeys.DOCTYPE_SYSTEM, doc.getDoctype().getSystemId());
6. 该类的transform(Source xmlSource, Result outputTarget)方法,可以将一个dom树写入一个文件,其中Source和Result的意思分别就是源和写入的目标,该目标可以是另一个内存中的DOM树,也可以是一个输出流.
准备source和result
我们在文档中找到了source的实现类DOMSource,result的实现类StreamResult(OutputStream outputStream)一看形式就知道,应该是我们想要的.其中StreamResult就是向输出流输出
我们先建一个FileOutputStream,然后用OutputStreamWriter修饰,以输出字符串,注意指定OutputStreamWriter输出的编码格式*/
Source source = new DOMSource(root);
FileOutputStream fos = new FileOutputStream(new File("books1.xml"));
/*注意这里这里获取原来文档的编码,作为新文档的编码,视频中是直接设置为utf-8,没有这个通用*/
OutputStreamWriter osWriter = new OutputStreamWriter(fos,doc.getXmlEncoding());
Result result = new StreamResult(osWriter);
/*本文原创,转载请注明来自:www.historycreator.com */
/*一切准备好了,只需要调用下面方法就可以了*/
ts.transform(source, result);
如果到此还不能写出程序来,看看视频演示吧
你会了添加元素,会不会删除元素然后保存呀?会不会把修改的结果保存到原文件呀?完全可以,就把文件名改下即可.删除的话,java api里有,我们查查看document. removeChild 就可以了.
如有问题欢迎到http://www.historycreator.com/bbs来交流,有问题来求助,没问题给大家解决问题:)