使用JAXP DOM修改XML文档教程

本文讲解使用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来交流,有问题来求助,没问题给大家解决问题:)


文章来自: 本站原创
引用通告: 查看所有引用 | 我要引用此文章
Tags: XML
相关日志:
评论: 0 | 引用: 0 | 查看次数: -
发表评论
昵 称:
密 码: 游客发言不需要密码.
内 容:
验证码: 验证码
选 项:
虽然发表评论不用注册,但是为了保护您的发言权,建议您注册帐号.