以 DOM 方式创建XML文档,示例如下(标有详细注释)
注意下面的toXMLString
方法,如何将Document转化为XML字符串。
package Test_DOM;
import java.io.ByteArrayOutputStream;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
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.Attr;
import org.w3c.dom.Comment;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
public class Test {
public static void main(String[] args)
throws ParserConfigurationException, TransformerException {
DocumentBuilderFactory builderFactory =
DocumentBuilderFactory.newInstance();
DocumentBuilder builder = builderFactory.newDocumentBuilder();
//创建一个DOM文档
Document document = builder.newDocument();
//创建一个DOM带有命名空间的元素
Element books = document.createElementNS("http://test.org/books","books");
//为文档document添加子节点books
document.appendChild(books);
//创建一个命名空间属性
Attr ns = document.createAttributeNS("http://test.org", "count");
ns.setValue("1");
//创建一个注释节点
Comment comment = document.createComment("books's comment");
//创建一个元素节点
Element book = document.createElement("book");
//为元素节点books设置命名空间ns
books.setAttributeNodeNS(ns);
//为元素节点books添加子节点comment
books.appendChild(comment);
//为元素节点books添加子节点book
books.appendChild(book);
/*
* 为元素节点book添加属性,等价于:
* Attr bookId = document.createAttribute("id");
* bookId.setValue("1");
* book.setAttributeNode(bookId);
*/
book.setAttribute("id", "1");
//创建一个元素节点
Element bookname = document.createElement("name");
//为元素节点book添加子节点bookname
book.appendChild(bookname);
//创建一个文本节点,并添加到元素bookname中
bookname.appendChild(document.createTextNode("Thinking in JAVA"));
//打印document节点
printNode(document,0);
//将document节点输出为XML格式
System.out.println(toXMLString(document));
}
/*
* 打印 DOM 节点
* 输出格式为:
* [nodeName,nodeValue]
* attributeName=attributeValue
* ...
* [childNodeName,childNodeValue]
* ...
*/
public static void printNode(Node node,int count){
if(node != null){
String tmp = "";
for(int i = 0 ; i < count ; i++)
tmp += " ";
System.out.println(tmp+node);
/*
* node.getAttributes()方法返回
* 包含node节点的属性的 NamedNodeMap(如果它是 Element)
*/
NamedNodeMap attrs = node.getAttributes();
if(attrs != null)
for(int i = 0 ; i < attrs.getLength() ; i++){
printNode(attrs.item(i),count+1);
}
/*
* node.getChildNodes()方法返回
* 包含node节点的所有子节点的 NodeList。
*/
NodeList childNodes = node.getChildNodes();
for(int i = 0 ; i < childNodes.getLength() ; i++){
printNode(childNodes.item(i),count+1);
}
}
}
//返回文档Document的XML格式的字符串
public static String toXMLString(Document document)
throws TransformerException{
/*
* 创建一个DOM转换器
*/
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
/*
* 设置输出属性
* encoding = "GB2312" 代表 输出的编码格式为 GB2312
* indent = "yes" 代表缩进输出
*/
transformer.setOutputProperty(OutputKeys.ENCODING,"GB2312");
transformer.setOutputProperty(OutputKeys.INDENT,"yes");
transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "2");
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
//transformer.transform()方法 将 XML Source转换为 Result
transformer.transform(new DOMSource(document), new StreamResult(outputStream));
return outputStream.toString();
}
}
运行结果如下:
[#document: null]
[books: null]
count="1"
[#text: 1]
[#comment: books's comment]
[book: null]
id="1"
[#text: 1]
[name: null]
[#text: Thinking in JAVA]
<?xml version="1.0" encoding="GB2312" standalone="no"?>
<books xmlns:ns0="http://test.org" ns0:count="1" xmlns="http://test.org/books">
<!--books's comment-->
<book id="1">
<name>Thinking in JAVA</name>
</book>
</books>
分享到:
相关推荐
### DOM4J解析XML详解 #### 一、DOM4J简介与特性 DOM4J是一个由dom4j.org开发的开源XML解析包,专为Java平台设计,它不仅支持DOM、SAX和JAXP标准,还巧妙地融入了Java集合框架,使其成为Java开发者在处理XML数据时...
XML解析主要分为DOM、SAX和StAX三种方式。DOM4J基于DOM模型,但性能优于标准DOM,因为它使用了优化的树结构。DOM将整个XML文档加载到内存中,形成一个完整的树形结构;SAX是事件驱动的,逐行解析,不保存整个文档;...
DOM4J是一个强大的Java库,专门用于处理XML文档。它提供了简单而灵活的API,使得在Java应用程序中读取、写入、修改以及查询...提供的源代码和解析XML详解文档将有助于进一步理解DOM4J的工作机制,并提升实际开发能力。
DOM方式解析XML是一种内存密集型的操作方式,因为它需要将整个文档加载到内存中并构建出DOM树。对于小到中等规模的文档,DOM是一个很好的选择,但如果处理大型的XML文件,则可能会因为内存消耗过大而导致性能问题。...
**DOM4J——XML解析库详解** XML(eXtensible Markup Language)作为一种标记语言,广泛应用于数据交换、配置文件和文档存储等领域。在Java环境中,解析XML文档时,我们通常会遇到各种库,其中DOM4J是一个非常流行...
### Java中使用DOM解析XML详解 #### 一、引言 在Java开发中,解析XML是一种常见的需求。XML(Extensible Markup Language,可扩展标记语言)作为一种数据存储和传输的标准格式,在不同系统间的数据交换中扮演着...
### DOM4J解析XML知识点详解 #### 一、DOM4J简介 DOM4J是一个Java库,用于处理XML文档。它的设计目标是为了提供一个简单、易于使用的API来处理XML文件,同时保持性能上的优势。与Java标准库中的DOM实现相比,DOM4J...
DOM4J提供了对XML Schema的全面支持,允许开发者在解析XML文档时进行严格的模式验证,确保数据的准确性和一致性。这对于企业级应用尤为重要,因为它们往往需要处理大量的结构化数据。 **3. 基于事件的处理** 对于...
### DOM4J解析XML详解 #### 一、DOM4J简介 DOM4J是一个由dom4j.org组织提供的开源XML解析工具包,专为Java平台设计。它支持DOM(Document Object Model)、SAX(Simple API for XML)以及JAXP(Java API for XML ...
DOM4J是一个非常流行的、强大的Java XML API,它提供了灵活且高效的方式来解析、创建、修改XML文档。本文将深入探讨如何使用DOM4J进行XML解析,并通过实例来帮助理解。 首先,让我们了解DOM4J的基本概念。DOM4J是...
Dom4j(Document Object Model for Java)是一个Java语言的开源XML API,它提供了非常便捷的方式来解析、创建以及操作XML文档。相较于其他XML解析库如SAX、JDOM等,Dom4j具有更强大的功能与更好的性能。 为了使用...
JAVA DOM 解析 XML 文件过程详解 JAVA DOM 解析 XML 文件过程详解是指使用 JAVA 语言通过 DOM(Document Object Model)解析 XML 文件的过程。DOM 是一种应用程序接口(API),它将 XML 文档转换为一个树形结构,...
**Dom4j详解:解析XML的强大工具** Dom4j是一个开放源码的Java库,它提供了灵活且功能强大的API来处理XML文档。在Java世界中,XML作为一种数据交换格式广泛应用于各种应用程序,如配置文件、数据传输、文档存储等。...
### DOM动态生成与XML DOM的使用 ...本文介绍了XML DOM的基本概念、主要对象以及如何使用XMLDOMDocument对象创建XML文档的方法。掌握了这些知识,你就可以更轻松地在各种应用场景中使用XML技术了。
### Java解析XML——DOM详解 #### 一、DOM解析概念 **Document Object Model (DOM)**是一种平台和语言中立的接口,它允许程序和脚本动态地访问和更新文档的内容、结构和样式。DOM最初是为HTML设计的,但后来也被...
### DOM4J创建与解析XML文档详解 #### 一、DOM4J简介 DOM4J是一种基于Java的轻量级XML处理库,它提供了一种简单直观的方式来读取、写入和修改XML文档。DOM4J是开源的,并且遵循Apache 2.0许可协议。与Java自带的...
- **内存效率**:与DOM相比,DOM4J占用更少的内存,因为它不是完整的文档树,而是基于事件驱动的解析方式。 - **全面的XPath支持**:DOM4J支持XPath,允许通过简单的表达式快速定位XML文档中的元素和属性。 - **XML ...
### DOM4J解析XML知识点详解 #### 一、DOM4J简介 DOM4J(Document Object Model for XML)是一款用于处理XML文档的轻量级Java库。它提供了一种非常简单且灵活的方式来创建、读取、修改和删除XML文档。DOM4J的主要...
Java中的DOM4J库是一个强大的XML处理工具,它提供了对XML文档的全面支持,包括解析、操作和生成XML。DOM4J的设计遵循了Java集合框架,并且与DOM、SAX和JAXP等XML处理API兼容,使得它在灵活性和易用性上表现优秀。 ...
- **读取XML文档**:DOM4J提供`SAXReader`和`DOMReader`两种方式。通常,`SAXReader`更适合处理大型XML文件,因为它基于事件驱动,不需要一次性加载整个文档到内存。以下是一个使用`SAXReader`读取XML文件的例子: ...