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

DOM在java项目中的实际应用(解析XML)

2010-10-16 18:55 483 查看
DOM,即Document Object Model,中文名字叫文档对象模型。用来以独立于平台和语言的方式访问和修改一个文档的内容和结构。

在java项目中使用DOM时,不需要额外引入jar包,因为JDK中已经包含了org.w3c.dom。

由于要在项目中,存在一些复杂的结构数据,这些数据之间的关系成树状形式,为了降低数据库设计的复杂度,所以在关系数据表中嵌入XML字段以存储这些数据,而不是通过关联表的形式(注:使用的是DB2 v9.5)。当在对XML字段进行增加、编辑、删除、查找等操作时,需要对数据进行String到XML、XML到String之间的转换,而负责该转换工作的就是DOM。

为了尽可能地避免代码的重复和和代码维护,特编写一个一个StringXMLTransform类,该类主要是用来生产XML文档,以及 String与Document之间的转换(仍需完善),代码如下:

package com.ciae.ne.common.classLib;
import java.io.IOException;
import java.io.InputStream;
import java.io.StringReader;
import java.io.StringWriter;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.TransformerFactoryConfigurationError;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
public class StringXMLTransform {
//解析器工厂类
private DocumentBuilderFactory docBuilderFactory=null;
//解析器
private DocumentBuilder docBuilder=null;
//操作的Document对象
private Document doc=null;

//	private static StringXMLTransform stringXML;
public StringXMLTransform()
{
if(docBuilderFactory==null)
docBuilderFactory=DocumentBuilderFactory.newInstance();
try {
docBuilder=docBuilderFactory.newDocumentBuilder();
doc=docBuilder.newDocument();
//设施XML版本号
doc.setXmlVersion("1.0");

} catch (ParserConfigurationException e) {
e.printStackTrace();
}
}

/*	public static StringXMLTransform newInstance()
{
if(stringXML==null)
return new StringXMLTransform();
return stringXML;
}*/
/**
* 添加注释
*/
public void SetComment(String comment)
{
doc.appendChild(doc.createComment(comment));
}
/**
* 创建元素节点
* @param elementName
* @return
*/
public Element createElement(String elementName)
{
return doc.createElement(elementName);
}
public Document getDoc() {
return doc;
}
/**
*添加元素节点
* @param element
*/
public void addElement(Element element)
{
doc.appendChild(element);
}
/**
* 将XML文档转换为String类型
* @return
*/
public String outputString()
{
TransformerFactory transFactory = TransformerFactory.newInstance();

// 设置输出结果
DOMSource domSource = new DOMSource(doc);

StringWriter sw=new StringWriter();

try {
Transformer tf=transFactory.newTransformer();
tf.transform(domSource, new StreamResult(sw));
} catch (TransformerConfigurationException e) {
e.printStackTrace();
} catch (TransformerFactoryConfigurationError e) {
e.printStackTrace();
} catch (TransformerException e) {
e.printStackTrace();
}
return sw.toString();
}
/**
* 将Document转换为String
* @param document
* @return
*/
public String DocumentToString(Document document)
{
TransformerFactory transFactory = TransformerFactory.newInstance();

// 设置输出结果
DOMSource domSource = new DOMSource(document);

StringWriter sw=new StringWriter();

try {
Transformer tf=transFactory.newTransformer();
tf.transform(domSource, new StreamResult(sw));
} catch (TransformerConfigurationException e) {
e.printStackTrace();
} catch (TransformerFactoryConfigurationError e) {
e.printStackTrace();
} catch (TransformerException e) {
e.printStackTrace();
}
return sw.toString();
}

public void StringToDocument(String content)
{
try {
doc=docBuilder.parse(new InputSource(new StringReader(content)));
} catch (SAXException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}

public Document TransformToDocument(String content)
{
try {
doc=docBuilder.parse(new InputSource(new StringReader(content)));
} catch (SAXException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return doc;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: