亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

用JDom整合Java和XML(1)

2019-11-18 13:38:34
字體:
來源:轉載
供稿:網友

一、概述

Jdom是用java語言讀、寫、操作xml的新API函數。Jason Hunter 和 Brett McLaughlin公開發布了它的測試版本。在直覺、簡單和高效的前提下,這些API函數被最大限度的優化。在接下來的篇幅里,Hunter 和 McLaughlin介紹怎么用Jdom去讀寫一個已經存在的XML文檔。

Jdom是一個開源的api,它以直接易懂的方式向java程序員描述XML文檔和文檔的內容。就象名字揭示的那樣,Jdom是為java優化的。為使用XML文檔提供一個低消耗的方法。Jdom的使用者可以不必把握太多的XML的知識就可以完成想要的操作。

Jdom可以和已有的XML技術如Simple API for XML (SAX)和 Document Object Model (DOM)相互協作.然而,它并不是簡單的從這些api中提取出一些。Jdom從這些已存在的技術中吸收了好的方面,自己建立了一套新的類和接口,用一個Jdom用戶的話來說就是:“這些接口是我從一開始閱讀org.w3c.dom就期待的”;Jdom可以讀入SAX或是DOM的內容,也可以輸出SAX或DOM可以接收的格式。這個能力可以使Jdom很好的和已有的用SAX或DOM建立的系統之間整合。

二、Jdom的原則

第一條并且是最重要的一條就是Jdom的api函數被設計成對java程序員來說是簡單易懂的。其他的XML解析函數被設計成語言通用的(支持相同的api函數在java,c++,甚至是javascript中)。Jdom利用了java的優秀的特征,如:方法重載、回收機制,和后臺處理等。

為了能夠簡單易用,這些函數不得不以程序員喜歡的形式來描繪XML文檔。例如:程序員想的到的一個元素的文本內容是什么樣子的呢?

<element>This is my text content</element>

在一些api中,元素的文本內容僅被當作是一個元素的孩子節點。從技術角度來說,這個設計需要下面的代碼才能訪問到元素的內容:

String content = element.getFirstChild().getValue();

Jdom用一種更簡單易用的方法來取得元素的內容:

String text = element.getText();

Jdom盡可能的減少程序員的工作量。依據拇指規則,Jdom應該用20%或是更少的努力來完成80%或是更多的java/xml方面的問題。這并不是說Jdom只是支持80%的XML規范(實際上我們希望Jdom100%的支持XML規范)。這個拇指規則是說有些東西可以加進去,但是沒有必要。這些api函數應該保持簡潔。

Jdom的第二條原則是說Jdom應該是快速的和輕量級的。調入和執行文檔應該快速,內存的消耗應該盡量小。Jdom的設計明顯是遵循這個原則。例如,就算在開始的時候,不太協調的操作已經比DOM快,但是比SAX顯的粗糙。盡管這樣,Jdom還是有許多SAX沒有的優點。

你需要Jdom嗎?

那么,你需要Jdom嗎?這真是一個很好的問題。已經有了存在的標準,為什么還要去發明一個新的呢?答案是Jdom解決了現有的標準解決不了的問題。

DOM完全在內存中描述一個元素樹。它是一個大的api,被設計操作幾乎所有可能的XML任務。它也必須有相同的api去支持不同的語言。因為這些限制,對那些習慣使用java的特征,如方法重載、簡單的set,get方法的java程序員來說,就很不習慣。DOM還需要大量的內存和較高的主頻,這使它很難和許多輕量級的web應用一起工作。

SAX沒有在內存中建立一個元素樹,它用事情發展的方式來描述。例如:它報告每個讀到的開始標記和結束標記。這種處理方式使它成為一個輕量級的快速讀取的api。然而,這種事件處理方式對服務器端的java程序員來說不夠直觀。SAX也不支持修改XML文檔和隨機讀取。

Jdom試圖組合DOM和SAX的優點。它被設計成一個可以在小內存上快速執行輕量級api 。Jdom也支持隨機讀取整個文檔,但是令人驚異的是它并不需要把整個文檔讀到內存中。這個api支持未來的當需要時才讀入信息的次輕量級操作。還有,Jdom通過標準的構造器和set方法支持XML文檔的修改。


三、獲取XML文檔



Jdom用org.Jdom.Document類的一個實例來描述一個XML文檔。這個文檔類是一個輕重量級的,它可以包括文檔類型、多處理指令的對象、一個根元素和注釋對象。你可以不需要構造器而從草稿構造一個文檔。

Document doc = new Document(new Element("rootElement"));

本文后面我們會討論從草稿構造一個XML文檔是多么的輕易。但是現在,我們從一個已存在的文件、一個流、或是一個URL路徑中構造我們的文檔。

SAXBuilder builder = new SAXBuilder();Document doc = builder.build(url);

你可以用org.Jdom.input包中提供的構造類從任何數據源中構造文檔。最近,有兩種構造方式:SAXBuilder 和 DOMBuilder。SAXBuilder用sax解析器從文件中構造文檔。SAXBuilder偵聽sax事件并從內存中建立一個相應的文檔。這種方式非常快(基本上和sax一樣快),這也是我們推薦的方式。DOMBuilder是另一種可選的方式,它從一個存在的org.w3c.dom.Document對象中建立Jdom文檔。它答應Jdom輕松的和構建DOM樹的工具實現接口。

Jdom的速度有值得期待的提高的潛力通過一個延期的構造器的完成。這個構造器檢查XML數據源,但當請求的時候才對它解析。例如:文檔的屬性當不訪問時是不需要解析的。

構造器仍在發展,可以通sql查詢、ldap查詢和其他的數據格式來夠造Jdom文檔。所以,一旦進到內存中,文檔就和建造它的工具沒有關系了。

SAXBuilder 和 DOMBuilder構造器答應用戶指明他們是否應該輪換,以便確定哪個解析器時間執行解析的任務。

public SAXBuilder(String parserClass, boolean validation);public DOMBuilder(String adapterClass, boolean validation);

默認的是用apache的開源 Xerces解析器并且是關閉輪換的。你應該注到DOMBuilder不象一個解析類,倒更象一個適配類。這是因為不是所有的DOM解析器都是相同的api。為了仍讓用戶選擇喜歡的解析器,Jdom使用一個對所有的dom解析器適用的公共的api的適配類。這個適配類支持所有流行的dom解析器,包括Apache 的 Xerces, Crimson,IBM 的 XML4J, Sun 的 PRoject X, 和Oracle 的 parsers V1 and V2.每一個解析器通過正確的調用別的解析器的方法執行標準的接口。這有點象jaXP,除了它支持jaxp所不支持的新的解析器。

四、輸出XML文檔

你可以用幾種不同的標準輸出工具輸出一個XML文檔。org.Jdom.output.XMLOutputter也許是最常用方法。它將xml文檔寫入一個特定的OutputStream.

SAXOutputter工具是另一個選擇。它產生基于Jdom xml文檔的sax事件,你可以把這些送到等待這些sax事件的應用程序那里。相同的方式,DOMOutputter產生一個dom文檔,這樣你就可以把它送給可以接收dom文檔的應用程序。輸出xml文檔的代碼看起來象下邊的樣子:

XMLOutputter outputter = new XMLOutputter();

outputter.output(doc, System.out);

XMLOutputter用參數定制輸出的格式。第一個參數是行縮進的格式;第二個參數是你是否想另起一行。因為機器到機器的原因,為了速度考慮你可以放棄行縮進和另起新行。

XMLOutputter outputter = new XMLOutputter("", false);

outputter.output(doc, System.out);

(譯注:這樣的話自己看起來會很不好看,而且每一次重新寫入的時候都會使這個xml文件變大,所以我建議還是要縮進和另起一行,支持中文的帶換行和縮進的格式如下:

XMLOutputter outp = new XMLOutputter(“”,true,"GB2312");

outp.setTextTrim(true);

outp.output(doc, System.out);

下面是讀入一個xml文檔,并把它又輸出的例子:

import java.io.*;

import org.Jdom.*;

import org.Jdom.input.*;

import org.Jdom.output.*;

public class PrettyPrinter {

public static void main(String[] args) {

 // Assume filename argument

 String filename = args[0];

 try {

// Build the document with SAX and Xerces, no validation

SAXBuilder builder = new SAXBuilder();

// Create the document

Document doc = builder.build(new File(filename));

// Output the document, use standard formatter

XMLOutputter fmt = new XMLOutputter();

fmt.output(doc, System.out);

 } catch (Exception e) {

e.printStackTrace();

 }

}

}




發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
美女啪啪无遮挡免费久久网站| 国产成人91久久精品| 国产做受高潮69| 亚洲精品国产综合区久久久久久久| 亚洲精品久久久久久久久久久久久| 日韩久久免费视频| 国产一区红桃视频| 欧美多人乱p欧美4p久久| 亚洲第一页在线| 亚洲第一精品久久忘忧草社区| 国产精品pans私拍| 最好看的2019年中文视频| 日韩美女免费视频| 中文字幕9999| 亚洲精品美女久久久| 全球成人中文在线| 国产精品吴梦梦| 久久天天躁狠狠躁夜夜av| 97国产精品视频人人做人人爱| 亚洲一区二区三区sesese| 欧美专区国产专区| 综合网中文字幕| 91九色国产在线| 国产精品高潮粉嫩av| 久久久国产视频91| 色妞在线综合亚洲欧美| 久久久国产精品一区| 在线观看亚洲视频| 久久久久久com| 久久久999精品免费| 欧美成人免费一级人片100| 国产精品久久婷婷六月丁香| 91久久精品国产| 日本精品一区二区三区在线播放视频| 国产精品久久一区主播| 日韩精品极品视频免费观看| 欧美在线一区二区三区四| 欧美亚洲免费电影| 中文欧美日本在线资源| 欧美成人免费全部| 国产亚洲精品久久| 韩国日本不卡在线| 北条麻妃久久精品| 成人做爰www免费看视频网站| 夜夜狂射影院欧美极品| 欧美日韩一区免费| 日韩精品视频在线观看网址| 久久免费国产精品1| 在线观看欧美www| 欧美亚洲另类视频| 欧美亚洲视频一区二区| 91精品国产91久久久| 久久在线免费视频| 欧美黄色三级网站| 亚洲精品国产精品乱码不99按摩| 亚洲午夜久久久影院| 国产精品第3页| 日本高清不卡的在线| 不卡av在线播放| 久久人人爽亚洲精品天堂| 国产在线高清精品| 国产精品女主播| 午夜精品久久久久久久99黑人| 国产欧美在线播放| 欧美性受xxxx黑人猛交| 91精品久久久久久综合乱菊| 狠狠色噜噜狠狠狠狠97| 亚洲精品一区二区在线| 国产精品对白刺激| 亚洲第一区中文99精品| 成人黄色免费网站在线观看| www.国产一区| 韩日精品中文字幕| 欧美—级高清免费播放| 91在线观看免费| 国产成人高潮免费观看精品| 91天堂在线观看| 亚洲区中文字幕| 久久国产精品电影| 久久久久这里只有精品| 日韩欧美999| 久久久久国产精品www| 精品一区二区电影| 国产精品成人播放| 国内精品视频一区| 日韩资源在线观看| 97视频在线免费观看| 动漫精品一区二区| 色妞色视频一区二区三区四区| 亚洲国产精品久久| 国产精品电影一区| 欧美人与性动交| 91九色综合久久| 97成人精品视频在线观看| 久久av中文字幕| 欧美成人精品在线播放| 久久精品91久久香蕉加勒比| 在线观看国产精品淫| 成人欧美在线视频| 国产精品稀缺呦系列在线| 午夜精品三级视频福利| 国产日本欧美一区二区三区在线| 亚洲 日韩 国产第一| 亚洲欧美日韩中文视频| 最近2019中文字幕一页二页| 欧美日韩免费区域视频在线观看| 欧美视频一二三| 国产精品久久久久久亚洲影视| 九九热视频这里只有精品| 久久久久久一区二区三区| 性欧美长视频免费观看不卡| 欧美国产日本高清在线| 欧美视频13p| 亚洲网址你懂得| 日韩欧美aⅴ综合网站发布| 8x拔播拔播x8国产精品| 亚洲一区二区三区香蕉| 91欧美精品午夜性色福利在线| 亚洲一区二区三区四区在线播放| 亚洲第一男人天堂| 亚洲欧美日韩高清| 国产精品欧美久久久| 亚洲电影免费在线观看| 亚洲一区亚洲二区| 欧美高清在线播放| 96sao精品视频在线观看| 亚洲精品综合精品自拍| 91精品久久久久久久| 国产精品直播网红| 国产在线视频不卡| 美日韩在线视频| 成人免费网站在线| 不卡av电影院| 91精品国产91久久| 欧美成人免费小视频| 黄色精品在线看| 性欧美xxxx交| 国产精品海角社区在线观看| 亚洲日本成人女熟在线观看| 日韩精品在线视频| 国产一区二区香蕉| 国产精品亚洲片夜色在线| 久久久99久久精品女同性| 性亚洲最疯狂xxxx高清| 精品久久久一区| 国产亚洲一区二区在线| 久久久久久久一区二区| 国产视频精品va久久久久久| 国产在线久久久| 亚洲精品久久7777777| 久久综合伊人77777蜜臀| 69av在线视频| 国产91色在线播放| 国产精品三级网站| 亚洲欧美一区二区三区久久| 国产精品成熟老女人| 日韩精品久久久久久久玫瑰园| 国产福利视频一区| 欧美国产日韩一区二区| 中文在线不卡视频| 欧美日韩国产va另类| 亚洲国产欧美日韩精品| 狠狠色狠狠色综合日日小说| 国产日韩欧美中文在线播放|