以 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-1.6.1.rar(内有dom4j-1.6.1.jar包和附加包),解析xml详解文档,解析xml的java源码。
java_Dom4j解析XML详解.doc
java_Dom4j解析XML详解.docx
java_Dom4j解析XML详解.pdf
java中四种操作(dom、sax、jdom、dom4j)xml方式详解与
DOM4J是 dom4j.org 出品的一个开源 XML 解析包。DOM4J应用于 Java 平台,采用了 Java 集合框架并完全支持 DOM,SAX 和 JAXP。 DOM4J 使用起来非常简单。只要你了解基本的 XML-DOM 模型,就能使用。 Dom:把整个...
JSP基于dom解析xml实例详解.docx
主要介绍了JAVA DOM解析XML文件过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
xmldom属性与方法详解[参照].pdf
Java 利用dom方式读取、创建xml详解及实例代码.docx
在Demo中,解析XML到前台显示用的是JDOM,而在模拟Bean工厂解析spring-config的时候,用的是DOM4J的解析方式,两者各有优点,如果你细心的话,可在源代码中发现两者的区别,祝你也早日了解XML的解析原理。
主要介绍了详解Android之解析XML文件三种方式,主要包括DOM,PULL,SAX,有兴趣的可以了解一下。
该文档详细介绍了xml 文件的元素类型,与元素的读取和操作
ActiveObject 对象 Msxml2.DOMDocument 详解 asp.net ajax webservice 必懂的一点知识
Dom方式创建XML,应用了标准xml构造器 javax.xml.parsers.DocumentBuilder 来创建 XML 文档,需要导入以下内容 javax.xml.parsers javax.xml.parsers.DocumentBuilder javax.xml.parsers.DocumentBuilderFactory ...
在Android中,常见的XML解析器分别为SAX解析器、DOM解析器和PULL解析器,下面,我将一一向大家详细介绍。 SAX解析器: SAX(Simple API for XML)解析器是一种基于事件的解析器,它的核心是事件处理模式,主要是围绕着...
XML的解析有三种方式,在Android中提供了三种解析XML的方式:DOM(Document Objrect Model) , SAX(Simple API XML) ,以及Android推荐的Pull解析方式,他们也各有弊端,而这里来看看使用DOM的方式。 2. Dom解析 DOM解析...
二、使用dom4j创建xml文档 3 三、使用dom4j解析xml文件 5 1. 构建dom4j树 5 2. 获取节点 5 3. 获取属性 6 4. 使用XPath获取节点和属性 6 四、使用dom4j修改xml文件 7 五、常用方法 8 1.Element元素API 8 2. ...