您好,登錄后才能下訂單哦!
本篇內容主要講解“Java與XML聯合編程的方法是什么”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“Java與XML聯合編程的方法是什么”吧!
DOM初步
DOM是Document Object Model的縮寫,即文檔對象模型。前面說過,XML將數據組織為一顆樹,所以DOM就是對這顆樹的一個對象描敘。通俗的說,就是通過解析XML文檔,為XML文檔在邏輯上建立一個樹模型,樹的節點是一個個對象。我們通過存取這些對象就能夠存取XML文檔的內容。[@more@]下面我們來看一個簡單的例子,看看在DOM中,我們是如何來操作一個XML文檔的。
這是一個XML文檔,也是我們要操作的對象:
下面,我們需要把這個文檔的內容解析到一個個的Java對象中去供程序使用,利用JAXP,我們只需幾行代碼就能做到這一點。首先,我們需要建立一個解析器工廠,以利用這個工廠來獲得一個具體的解析器對象:
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); |
我們在這里使用DocumentBuilderFacotry的目的是為了創建與具體解析器無關的程序,當DocumentBuilderFactory類的靜態方法newInstance()被調用時,它根據一個系統變量來決定具體使用哪一個解析器。又因為所有的解析器都服從于JAXP所定義的接口,所以無論具體使用哪一個解析器,代碼都是一樣的。所以當在不同的解析器之間進行切換時,只需要更改系統變量的值,而不用更改任何代碼。這就是工廠所帶來的好處。這個工廠模式的具體實現,可以參看下面的類圖。
DocumentBuilder db = dbf.newDocumentBuilder(); |
當獲得一個工廠對象后,使用它的靜態方法newDocumentBuilder()方法可以獲得一個DocumentBuilder對象,這個對象代表了具體的DOM解析器。但具體是哪一種解析器,微軟的或者IBM的,對于程序而言并不重要。
然后,我們就可以利用這個解析器來對XML文檔進行解析了:
Document doc = db.parse("c:/xml/message.xml"); |
DocumentBuilder的parse()方法接受一個XML文檔名作為輸入參數,返回一個Document對象,這個Document對象就代表了一個XML文檔的樹模型。以后所有的對XML文檔的操作,都與解析器無關,直接在這個Document對象上進行操作就可以了。而具體對Document操作的方法,就是由DOM所定義的了。
Jaxp支持W3C所推薦的DOM 2。如果你對DOM很熟悉,那么下面的內容就很簡單了:只需要按照DOM的規范來進行方法調用就可以。當然,如果你對DOM不清楚,也不用著急,后面我們會有詳細的介紹。在這兒,你所要知道并牢記的是:DOM是用來描敘XML文檔中的數據的模型,引入DOM的全部原因就是為了用這個模型來操作XML文檔的中的數據。DOM規范中定義有節點(即對象)、屬性和方法,我們通過這些節點的存取來存取XML的數據。
從上面得到的Document對象開始,我們就可以開始我們的DOM之旅了。使用Document對象的getElementsByTagName()方法,我們可以得到一個NodeList對象,一個Node對象代表了一個XML文檔中的一個標簽元素,而NodeList對象,觀其名而知其意,所代表的是一個Node對象的列表:
NodeList nl = doc.getElementsByTagName("message"); |
我們通過這樣一條語句所得到的是XML文檔中所有
Node my_node = nl.item(0); |
String message = my_node.getFirstChild().getNodeValue(); |
1.基本的DOM對象 |
點擊可放大
2.DOM實例 |
JSP Insider Sun Microsystems Apache Group |
import javax.xml.parsers.*; import org.w3c.dom.*; |
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder=factory.newDocumentBuilder(); Document doc=builder.parse("links.xml"); doc.normalize(); |
NodeList links =doc.getElementsByTagName("link"); |
for (int i=0;i<links.getLength();i++){ Element link=(Element) links.item(i); System.out.print("Content: "); System.out.println(link.getElementsByTagName("text").item(0).getFirstChild().getNodeValue()); System.out.print("URL: "); System.out.println(link.getElementsByTagName("url").item(0).getFirstChild().getNodeValue()); System.out.print("Author: "); System.out.println(link.getElementsByTagName("author").item(0).getFirstChild().getNodeValue()); System.out.print("Date: "); Element linkdate=(Element) link.getElementsByTagName("date").item(0); String day=linkdate.getElementsByTagName("day").item(0).getFirstChild().getNodeValue(); String month=linkdate.getElementsByTagName("month").item(0).getFirstChild().getNodeValue(); String year=linkdate.getElementsByTagName("year").item(0).getFirstChild().getNodeValue(); System.out.println(day+"-"+month+"-"+year); System.out.print("Description: "); System.out.println(link.getElementsByTagName("description").item(0).getFirstChild().getNodeValue()); System.out.println(); } |
import javax.xml.parsers.*; import javax.xml.transform.*; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; import org.w3c.dom.*; |
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder=factory.newDocumentBuilder(); Document doc=builder.parse("links.xml"); doc.normalize(); //---取得變量---- String text="Hanzhong's Homepage"; String url="www.hzliu.com"; String author="Hzliu Liu"; String discription="A site from Hanzhong Liu, give u lots of suprise!!!"; |
Text textseg; Element link=doc.createElement("link"); |
Element linktext=doc.createElement("text"); textseg=doc.createTextNode(text); linktext.appendChild(textseg); link.appendChild(linktext); Element linkurl=doc.createElement("url"); textseg=doc.createTextNode(url); linkurl.appendChild(textseg); link.appendChild(linkurl); Element linkauthor=doc.createElement("author"); textseg=doc.createTextNode(author); linkauthor.appendChild(textseg); link.appendChild(linkauthor); java.util.Calendar rightNow = java.util.Calendar.getInstance(); String day=Integer.toString(rightNow.get(java.util.Calendar.DAY_OF_MONTH)); String month=Integer.toString(rightNow.get(java.util.Calendar.MONTH)); String year=Integer.toString(rightNow.get(java.util.Calendar.YEAR)); Element linkdate=doc.createElement("date"); Element linkdateday=doc.createElement("day"); textseg=doc.createTextNode(day); linkdateday.appendChild(textseg); Element linkdatemonth=doc.createElement("month"); textseg=doc.createTextNode(month); linkdatemonth.appendChild(textseg); Element linkdateyear=doc.createElement("year"); textseg=doc.createTextNode(year); linkdateyear.appendChild(textseg); linkdate.appendChild(linkdateday); linkdate.appendChild(linkdatemonth); linkdate.appendChild(linkdateyear); link.appendChild(linkdate); Element linkdiscription=doc.createElement("description"); textseg=doc.createTextNode(discription); linkdiscription.appendChild(textseg); link.appendChild(linkdiscription); |
doc.getDocumentElement().appendChild(link); |
TransformerFactory tFactory =TransformerFactory.newInstance(); Transformer transformer = tFactory.newTransformer(); DOMSource source = new DOMSource(doc); StreamResult result = new StreamResult(new java.io.File("links.xml")); transformer.transform(source, result); |
到此,相信大家對“Java與XML聯合編程的方法是什么”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。