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
(
)
;
document
.
setXmlStandalone
(
true
)
;
Element bookstore
=
document
.
createElement
(
"bookstore"
)
;
Element book
=
document
.
createElement
(
"book"
)
;
Element name
=
document
.
createElement
(
"name"
)
;
name
.
setTextContent
(
"雷神"
)
;
book
.
appendChild
(
name
)
;
book
.
setAttribute
(
"id"
,
"1"
)
;
bookstore
.
appendChild
(
book
)
;
document
.
appendChild
(
bookstore
)
;
TransformerFactory tff
=
TransformerFactory
.
newInstance
(
)
;
Transformer tf
=
tff
.
newTransformer
(
)
;
tf
.
setOutputProperty
(
OutputKeys
.
INDENT
,
"yes"
)
;
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失败"
)
;
生成结果:
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 {
Document document = DocumentHelper.createDocument();
Element rss = document.addElement("rss");
rss.addAttribute("version", "2.0");
Element channel = rss.addElement("channel");
Element title = channel.addElement("title");
title.setText("国内最新新闻");
OutputFormat format = OutputFormat.createPrettyPrint();
format.setEncoding("UTF-8");
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失败");
生成结果:
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 {
Element rss = new Element("rss");
rss.setAttribute("version", "2.0");
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();
format.setIndent(" ");
format.setEncoding("UTF-8");
XMLOutputter outputer = new XMLOutputter(format);
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失败");
生成结果:

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));
public static void createXml(List<Book> bList){
SAXTransformerFactory tff = (SAXTransformerFactory) SAXTransformerFactory.newInstance();
try {
TransformerHandler handler = tff.newTransformerHandler();
Transformer tr = handler.getTransformer();
tr.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
tr.setOutputProperty(OutputKeys.INDENT, "yes");
File f = new File("src/newbooks.xml");
if(!f.exists()){
f.createNewFile();
Result result = new StreamResult(new FileOutputStream(f));
handler.setResult(result);
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);
attr.clear();
handler.startElement("", "", "name", attr);
handler.characters(book.getName().toCharArray(), 0, book.getName().length());
handler.endElement("", "", "name");
attr.clear();
handler.startElement("", "", "year", attr);
handler.characters(book.getYear().toCharArray(), 0, book.getYear().length());
handler.endElement("", "", "year");
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");
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");
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");
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)
本文档主要讲述的是详解Java解析XML的四种方法;XML现在已经成为一种通用的数据交换格式,它的平台无关性,语言无关性,系统无关性,给数据集成与交互带来了极大的方便。
本文使用JAVA语言来实现DOM与SAX的XML文档生成与解析。
//创建一个 DocumentBuilderFactory 对象
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
创建 DocumentBuilder 对象
* order 订单节点
public static final String NAMESPACE_CEB_URI = "http://www.chinaport.gov.cn/ceb";
学完了解析XML,就该学习生成XML文件了。首先学习的是如何使用DOM方式生成XML文件。使用DOM方式生成XML文件有如下几步:首先是创建DOM树(即规定XML文件中的内容):
创建DocumentBuilderFactory对象
通过DocumentBuilderFactory对象创建DocumentBuilder对象
通过DocumentBuilder对象的newDocument()方法创建一
try {
// 创建DocumentBuilderFactory
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
// 创建DocumentBuilder
DocumentBuilder builder = factory.newDocumentBuilder();
// 创建Document
Document document = builder.newDocument();
// 创建根节点
Element root = document.createElement("bookstore");
document.appendChild(root);
// 创建子节点
Element book = document.createElement("book");
root.appendChild(book);
// 创建book的子节点
Element name = document.createElement("name");
name.setTextContent("Java编程思想");
book.appendChild(name);
Element author = document.createElement("author");
author.setTextContent("Bruce Eckel");
book.appendChild(author);
Element price = document.createElement("price");
price.setTextContent("108.00");
book.appendChild(price);
// 将document写入到xml文件
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
DOMSource source = new DOMSource(document);
File file = new File("book.xml");
StreamResult result = new StreamResult(file);
transformer.transform(source, result);
} catch (Exception e) {
e.printStackTrace();
JDOM方式:
```java
try {
// 创建根节点
Element root = new Element("bookstore");
Document document = new Document(root);
// 创建子节点
Element book = new Element("book");
root.addContent(book);
// 创建book的子节点
Element name = new Element("name");
name.setText("Java编程思想");
book.addContent(name);
Element author = new Element("author");
author.setText("Bruce Eckel");
book.addContent(author);
Element price = new Element("price");
price.setText("108.00");
book.addContent(price);
// 创建XMLOutputter
XMLOutputter outputter = new XMLOutputter();
outputter.setFormat(Format.getPrettyFormat());
// 将document写入到xml文件
File file = new File("book.xml");
FileWriter writer = new FileWriter(file);
outputter.output(document, writer);
writer.close();
} catch (Exception e) {
e.printStackTrace();
JSONArray jsa = jsb.getJSONArray("results");
for (Object o : jsa) {
JSONObject obj = (JSONObject) o;
System.out.println(obj.toJSONString());
[/code]
Java 读取xml文件的四种方式
java-zh:
Activity 工作流(一)
Dadikea:
Activity 添加批注与获取批注
分享及成功: