DOM在java項目中的實際應用(解析XML)

來源:互聯網
上載者:User

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;<br />import java.io.IOException;<br />import java.io.InputStream;<br />import java.io.StringReader;<br />import java.io.StringWriter;<br />import javax.xml.parsers.DocumentBuilder;<br />import javax.xml.parsers.DocumentBuilderFactory;<br />import javax.xml.parsers.ParserConfigurationException;<br />import javax.xml.transform.Transformer;<br />import javax.xml.transform.TransformerConfigurationException;<br />import javax.xml.transform.TransformerException;<br />import javax.xml.transform.TransformerFactory;<br />import javax.xml.transform.TransformerFactoryConfigurationError;<br />import javax.xml.transform.dom.DOMSource;<br />import javax.xml.transform.stream.StreamResult;<br />import org.w3c.dom.Document;<br />import org.w3c.dom.Element;<br />import org.xml.sax.InputSource;<br />import org.xml.sax.SAXException;<br />public class StringXMLTransform {<br />//解析器工廠類<br />private DocumentBuilderFactory docBuilderFactory=null;<br />//解析器<br />private DocumentBuilder docBuilder=null;<br />//操作的Document對象<br />private Document doc=null;</p><p>//private static StringXMLTransform stringXML;<br />public StringXMLTransform()<br />{<br />if(docBuilderFactory==null)<br />docBuilderFactory=DocumentBuilderFactory.newInstance();<br />try {<br />docBuilder=docBuilderFactory.newDocumentBuilder();<br />doc=docBuilder.newDocument();<br />//設施XML版本號碼<br />doc.setXmlVersion("1.0");</p><p>} catch (ParserConfigurationException e) {<br />e.printStackTrace();<br />}<br />}</p><p>/*public static StringXMLTransform newInstance()<br />{<br />if(stringXML==null)<br />return new StringXMLTransform();<br />return stringXML;<br />}*/<br />/**<br /> * 添加註釋<br /> */<br />public void SetComment(String comment)<br />{<br />doc.appendChild(doc.createComment(comment));<br />}<br />/**<br /> * 建立元素節點<br /> * @param elementName<br /> * @return<br /> */<br />public Element createElement(String elementName)<br />{<br />return doc.createElement(elementName);<br />}<br />public Document getDoc() {<br />return doc;<br />}<br />/**<br /> *添加元素節點<br /> * @param element<br /> */<br />public void addElement(Element element)<br />{<br />doc.appendChild(element);<br />}<br />/**<br /> * 將XML文檔轉換為String類型<br /> * @return<br /> */<br />public String outputString()<br />{<br /> TransformerFactory transFactory = TransformerFactory.newInstance();</p><p> // 設定輸出結果<br /> DOMSource domSource = new DOMSource(doc);</p><p> StringWriter sw=new StringWriter();</p><p> try {<br />Transformer tf=transFactory.newTransformer();<br />tf.transform(domSource, new StreamResult(sw));<br />} catch (TransformerConfigurationException e) {<br />e.printStackTrace();<br />} catch (TransformerFactoryConfigurationError e) {<br />e.printStackTrace();<br />} catch (TransformerException e) {<br />e.printStackTrace();<br />}<br />return sw.toString();<br />}<br />/**<br /> * 將Document轉換為String<br /> * @param document<br /> * @return<br /> */<br />public String DocumentToString(Document document)<br />{<br /> TransformerFactory transFactory = TransformerFactory.newInstance();</p><p> // 設定輸出結果<br /> DOMSource domSource = new DOMSource(document);</p><p> StringWriter sw=new StringWriter();</p><p> try {<br />Transformer tf=transFactory.newTransformer();<br />tf.transform(domSource, new StreamResult(sw));<br />} catch (TransformerConfigurationException e) {<br />e.printStackTrace();<br />} catch (TransformerFactoryConfigurationError e) {<br />e.printStackTrace();<br />} catch (TransformerException e) {<br />e.printStackTrace();<br />}<br />return sw.toString();<br />}</p><p>public void StringToDocument(String content)<br />{<br />try {<br />doc=docBuilder.parse(new InputSource(new StringReader(content)));<br />} catch (SAXException e) {<br />e.printStackTrace();<br />} catch (IOException e) {<br />e.printStackTrace();<br />}<br />}</p><p>public Document TransformToDocument(String content)<br />{<br />try {<br />doc=docBuilder.parse(new InputSource(new StringReader(content)));<br />} catch (SAXException e) {<br />e.printStackTrace();<br />} catch (IOException e) {<br />e.printStackTrace();<br />}<br />return doc;<br />}<br />}<br />

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.