久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

賽迪網(wǎng)_IT門(mén)戶_技術(shù)天地_tech_ccidnet教您快速上手使用JDOM處理XML文檔的技巧 -

 feifan 2005-11-02
JDOM的介紹以及與JAXB的比較

Java + XML = JDOM ,!

這就是JDOM設(shè)計(jì)者的目標(biāo),。如果你曾經(jīng)使用過(guò)煩人的SAX或是DOM來(lái)處理XML,你就會(huì)知道為什么要有JDOM或者是JAXB,。在JavaOne會(huì)議上JDOM的主要?jiǎng)?chuàng)始人Jason Hunter有一篇精彩的演講介紹了JDOM技術(shù),,題目就是JDOM Makes XML Easy。

在那篇文檔里,JDOM被拿來(lái)與DOM比較,,而我更愿意拿它同JAXB比較,。因?yàn)镴AXB和JDOM都是為了在Java中提供比DOM和SAX更為方便的XML處理接口而開(kāi)發(fā)的,并且通過(guò)完全不同的途徑來(lái)解決這個(gè)問(wèn)題,。JDOM的處理方式是與DOM類(lèi)似的樹(shù)操作,。而JAXB通過(guò)DTD和綁定模式來(lái)生成訪問(wèn)XML文檔的Java代碼,將XML映射成了Java對(duì)象來(lái)操作,。你可以根據(jù)項(xiàng)目的需要和個(gè)人喜好來(lái)決定采用哪一個(gè),。

JDOM與JAXB的比較,從本身的特點(diǎn)來(lái)看:

1) JDOM比JAXB更容易上手,。使用JAXB首先要會(huì)編寫(xiě)DTD,,然后還要會(huì)編寫(xiě)綁定模式。JDOM沒(méi)有這樣的要求,,如果你會(huì)Java和XML,,甚至可以說(shuō)光是看JDOM的javadoc文檔就能夠使用JDOM。

2) JAXB編寫(xiě)好DTD和綁定模式以后,,XML文檔被映射成了Java對(duì)象,,其數(shù)據(jù)就是Java對(duì)象的屬性,連數(shù)據(jù)類(lèi)型都做好了轉(zhuǎn)換,,因此,,訪問(wèn)XML文檔比JDOM要簡(jiǎn)便,可以說(shuō)是一勞永逸,。

3) JAXB由某個(gè)DTD和綁定模式生成的代碼只能訪問(wèn)該DTD所約束的文檔,。如果想要訪問(wèn)其他XML文檔,需要再編寫(xiě)DTD和綁定模式,。JDOM可以處理任何XML文檔,,包括受約束的和不受約束的。

目前JDOM和JAXB都沒(méi)有正式版本,。JDOM的最新版本是beta8,,JAXB是1.0 early access,其規(guī)范版本是0.21,。相對(duì)而言,,JDOM更成熟一些。例如JAXB不支持名字空間,、不能向XML文檔寫(xiě)入處理指令,,有時(shí)我們需要保留的換行符和首尾空格在JAXB中自動(dòng)過(guò)濾掉了,就連放在里面也不能幸免,。JDOM就沒(méi)有這些限制,。如果說(shuō)以上的3點(diǎn)比較是JDOM和JAXB本身的特點(diǎn)所決定的,,幾乎不可能改變,那么這里表明,,JAXB還需要更多的工作,。

獲得并安裝JDOM

在http://可以下載JDOM的最新版本。以JDOM beta8的2進(jìn)制版本為例,。下載后解壓縮,,JDOM的jar文件就是build目錄下的文件jdom.jar,將之加入類(lèi)路徑,。另外JDOM還需要lib目錄下那些jar文件如xerces.jar的支持。如果在使用中出現(xiàn)以下錯(cuò)誤:

java.lang.NoSuchMethodError




java.lang.NoClassDefFoundError: 
org/xml/sax/SAXNotRecognizedException


你需要保證xerces.jar文件在CLASSPATH中位于其他XML類(lèi),,如JAXP或Crimson之前,,這些類(lèi)文件,包括以前老版本的xerces,,可能不支持SAX2.0或DOM Level 2,。于是導(dǎo)致了上面的錯(cuò)誤。

一個(gè)簡(jiǎn)單的例子

JDOM的處理方式有些類(lèi)似于DOM,,但它主要是用SAX實(shí)現(xiàn)的,,你不必?fù)?dān)心處理速度和內(nèi)存的問(wèn)題。另外,,JDOM中幾乎沒(méi)有接口,,的類(lèi)全部是實(shí)實(shí)在在的類(lèi),沒(méi)有類(lèi)工廠類(lèi)的,。其最重要的一個(gè)包org.jdom中主要有以下類(lèi):

– Attribute
– CDATA
– Comment
– DocType
– Document
– Element
– EntityRef
– Namespace
– ProcessingInstruction
– Text


數(shù)據(jù)輸入要用到XML文檔要通過(guò)org.jdom.input包,,反過(guò)來(lái)需要org.jdom.output。如前面所說(shuō),,關(guān)是看API文檔就能夠使用,。

我們的例子讀入XML文件exampleA.xml,加入一條處理指令,,修改第一本書(shū)的價(jià)格和作者,,并添加一條屬性,然后寫(xiě)入文件exampleB.xml:

//exampleA.xml

<?xml version="1.0"
encoding="GBK"?>
<bookList>
<book>
 <name>Java編程入門(mén)</name>
 <author>張三</author>
 <publishDate>2002-6-6</publishDate>
<price>35.0</price>
</book>
 <book>
<name>XML在Java中的應(yīng)用</name>
<author>李四</author>
<publishDate>2002-9-16</publishDate>
<price>92.0</price>
</book>
</bookList>
//testJDOM.java
import org.jdom.*;
import org.jdom.output.*;
import org.jdom.input.*;
import java.io.*;
public class TestJDOM
{
public static void main
(String args[])throws Exception
{
SAXBuilder sb = new SAXBuilder();
//從文件構(gòu)造一個(gè)Document,,
因?yàn)閄ML文件中已經(jīng)指定了編碼,,所以這里不必了
 Document doc = sb.build(new
 FileInputStream("exampleA.xml"));
//加入一條處理指令
ProcessingInstruction pi = 
new ProcessingInstruction
("xml-stylesheet",
"href=\"bookList.html.xsl\" type=\"text/xsl\"");
 doc.addContent(pi);
Element root = doc.getRootElement();
//得到根元素
java.util.List books = root.getChildren();
//得到根元素所有子元素的集合
Element book = (Element)books.get(0); 
//得到第一個(gè)book元素
//為第一本書(shū)添加一條屬性
 Attribute a = new Attribute("hot","true");  
book.setAttribute(a);
 Element author = book.getChild("author");
 //得到指定的字元素
author.setText("王五"); 
//將作者改為王五
//或 Text t = new Text("王五");
book.addContent(t);
Element price = book.getChild("price");
//得到指定的字元素
//修改價(jià)格,比較郁悶的是我們必須自己
轉(zhuǎn)換數(shù)據(jù)類(lèi)型,,而這正是JAXB的優(yōu)勢(shì)
author.setText(Float.toString(50.0f)); 
 String indent = "    ";
 boolean newLines = true;
 XMLOutputter outp =
 new XMLOutputter(indent,newLines,"GBK");
 outp.output(doc,
 new FileOutputStream("exampleB.xml"));
}
};


執(zhí)行結(jié)果exampleB.xml:

<?xml version="1.0" encoding="GBK"?>

<bookList>

    <book hot=”true”>

        <name>Java編程入門(mén)</name>

        <author>50.0</author>

        <publishDate>2002-6-6</publishDate>

        <price>35.0</price>

    </book>

    <book>

        <name>XML在Java中的應(yīng)用</name>

        <author>李四</author>

        <publishDate>2002-9-16</publishDate>

        <price>92.0</price>

    </book>

</bookList>

<?xml-stylesheet href="bookList.html.xsl" 
type="text/xsl"?>


在默認(rèn)情況下,,JDOM的Element類(lèi)的getText()這類(lèi)的方法不會(huì)過(guò)濾空白字符,如果你需要過(guò)濾,,用setTextTrim() ,。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn),。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類(lèi)似文章 更多