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之间的转换(仍需完善),代码如下:
在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; } }
相关文章推荐
- Java眼中的XML--文件读取--1 应用DOM方式解析XML
- XML学习04-Java中DOM方式解析XML文件
- Java解析XML汇总(DOM/SAX/JDOM/DOM4j/XPath)
- Java解析XML文档——dom解析xml
- Java中Dom解析XML
- Java解析XML汇总(DOM/SAX/JDOM/DOM4j/XPath)
- java DOM解析XML(2) 树
- JAVA解析XML的方式DOM、SAX、DOM4J、JDOM、StAX之比较
- JAVA XML 解析 DOM 方式
- 【JAVA学习小结】-【用JAXP解析包解析XML方法】-【第一篇DOM解析】
- Java解析xml的主要解析器: SAX和DOM的选择(附上新方法--Pull解析)
- Java解析XML汇总(DOM/SAX/JDOM/DOM4j/XPath)
- java之Dom解析XML
- DOM解析XML,及Android应用联网升级的实现方法
- Java Dom解析xml
- Java解析XML汇总(DOM/SAX/JDOM/DOM4j/XPath)
- Java DOM 解析 XML详解
- Java 解析 xml 之 DOM and SAX
- Java解析XML---DOM
- Java使用DOM解析XML的文件属性名和属性值、节点名和节点值