您的位置:首页 > 编程语言 > Java开发

Java:XML篇,使用DOM读取并解析XML

2013-01-19 08:13 666 查看

1. 描述

DOM(Document Object Model) DOM 一种独立于平台和语言的方式访问和修改一个文档的内容和结构。

DOM 采用建立树形结构的方式访问 XML文档,实际上是以面向对象方式描述的文档模型。

DOM 树在内存中是持久的,程序能对数据和结构作出更改,使用起来也要简单得多。

DOM 对于特别大的文档,解析和加载整个文档可能很慢且很耗资源。

2. 示范代码

package com.clzhang.sample.xml;

import java.io.*;

import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.DocumentBuilder;

import javax.xml.transform.OutputKeys;
import javax.xml.transform.Source;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;

import org.w3c.dom.Document;
import org.w3c.dom.NodeList;
import org.w3c.dom.Node;
import org.w3c.dom.Element;

/**
* DOM(Document Object Model) DOM 一种独立于平台和语言的方式访问和修改一个文档的内容和结构。
* DOM 采用建立树形结构的方式访问 XML文档,实际上是以面向对象方式描述的文档模型。
* DOM 树在内存中是持久的,程序能对数据和结构作出更改,使用起来也要简单得多。
* DOM 对于特别大的文档,解析和加载整个文档可能很慢且很耗资源。
*/
public class DOMTest {
// 读取文件测试(其输入是writeXMLFile的输出)
public void parseByDOM(String filename) throws Exception {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();

Document doc = builder.parse(new File(filename));
NodeList nlDoc = doc.getElementsByTagName("doc");
for (int i = 0; i < nlDoc.getLength(); i++) {
Element element = (Element)nlDoc.item(i);
System.out.println(element.getNodeName() + "\tid=" + element.getAttribute("id"));
for (Node node = element.getFirstChild(); node != null; node = node
.getNextSibling()) {
if (node.getNodeType() == Node.ELEMENT_NODE) {
Element child = (Element) node;
String value = child.getTextContent();
System.out.println("\t" + child.getNodeName() + "=" + value);
}
}
System.out.println();
}
}

// 写入文件测试
public void writeXMLFile(String filename) throws Exception {
// 创建对象结构
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = dbf.newDocumentBuilder();
Document doc = builder.newDocument();

// 先创建根节点
Element root = doc.createElement("add");
doc.appendChild(root); // 将根元素添加到文档上

// 再创建子节点一,并加入些信息
Element element = doc.createElement("doc");
element.setAttribute("id", "1");
Element title = doc.createElement("title");
title.appendChild(doc.createTextNode("维护权益!"));
element.appendChild(title);
Element content = doc.createElement("content");
content.appendChild(doc.createTextNode("有一个更完善的交流平台,共建美好家园"));
element.appendChild(content);
root.appendChild(element);

// 再创建子节点二,并加入些信息
element = doc.createElement("doc");
element.setAttribute("id", "2");
title = doc.createElement("title");
title.appendChild(doc.createTextNode("不维护权益!"));
element.appendChild(title);
content = doc.createElement("content");
content.appendChild(doc.createTextNode("没有一个更完善的交流平台,不共建美好家园"));
element.appendChild(content);
root.appendChild(element);

// 输出到文件
Source source = new DOMSource(doc);
FileOutputStream fos = new FileOutputStream(filename);
OutputStreamWriter osw = new OutputStreamWriter(fos, "UTF-8");
Transformer tf = TransformerFactory.newInstance().newTransformer();
tf.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
tf.transform(source, new StreamResult(osw));
osw.close();
fos.close();
}

public static void main(String arge[]) throws Exception {
long starttime = System.currentTimeMillis();

DOMTest ins = new DOMTest();
ins.writeXMLFile("bbs.xml");
ins.parseByDOM("bbs.xml");

System.out.println("运行时间:" + (System.currentTimeMillis() - starttime)
+ " 毫秒");
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: