国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

JDOM使用詳解及實(shí)例

2019-11-17 05:26:38
字體:
供稿:網(wǎng)友

JDOM使用詳解及實(shí)例

一、JDOM 簡(jiǎn)介JDOM是一個(gè)開源項(xiàng)目,它基于樹型結(jié)構(gòu),利用純java的技術(shù)對(duì)xml文檔實(shí)現(xiàn)解析、生成、序列化以及多種操作。JDOM 直接為JAVA編程服務(wù)。它利用更為強(qiáng)有力的JAVA語(yǔ)言的諸多特性(方法重載、集合概念以及映射),把SAX和DOM的功能有效地結(jié)合起來。在使用設(shè)計(jì)上盡可能地隱藏原來使用XML過程中的復(fù)雜性。利用JDOM處理XML文檔將是一件輕松、簡(jiǎn)單的事。JDOM 在2000年的春天被Brett McLaughlin和Jason Hunter開發(fā)出來,以彌補(bǔ)DOM及SAX在實(shí)際應(yīng)用當(dāng)中的不足之處。這些不足之處主要在于SAX沒有文檔修改、隨機(jī)訪問以及輸出的功能,而對(duì)于DOM來說,JAVA程序員在使用時(shí)來用起來總覺得不太方便。DOM的缺點(diǎn)主要是來自于由于Dom是一個(gè)接口定義語(yǔ)言(IDL),它的任務(wù)是在不同語(yǔ)言實(shí)現(xiàn)中的一個(gè)最低的通用標(biāo)準(zhǔn),并不是為JAVA非凡設(shè)計(jì)的。JDOM的最新版本為JDOM Beta 9。最近JDOM被收錄到JSR-102內(nèi),這標(biāo)志著JDOM成為了JAVA平臺(tái)組成的一部分。二、JDOM 包概覽JDOM是由以下幾個(gè)包組成的
org.jdom                包含了所有的xml文檔要素的java類org.jdom.adapters         包含了與dom適配的java類org.jdom.filter            包含了xml文檔的過濾器類org.jdom.input            包含了讀取xml文檔的類org.jdom.output           包含了寫入xml文檔的類org.jdom.transform        包含了將jdom xml文檔接口轉(zhuǎn)換為其他xml文檔接口org.jdom.XPath            包含了對(duì)xml文檔xpath操作的類三、JDOM 類說明1、org.JDOM這個(gè)包里的類是你J解析xml文件后所要用到的所有數(shù)據(jù)類型。AttributeCDATAComentDocTypeDocumentElementEntityRefNamespacePRoscessingInstrUCtionText2、org.JDOM.transform在涉及xslt格式轉(zhuǎn)換時(shí)應(yīng)使用下面的2個(gè)類JDOMSourceJDOMResultorg.JDOM.input3、輸入類,一般用于文檔的創(chuàng)建工作SAXBuilderDOMBuilderResultSetBuilderorg.JDOM.output4、輸出類,用于文檔轉(zhuǎn)換輸出XMLOutputterSAXOutputterDomOutputterJTreeOutputter使用前注重事項(xiàng):1.JDOM對(duì)于JAXP 以及 TRax 的支持JDOM 支持JAXP1.1:你可以在程序中使用任何的parser工具類,默認(rèn)情況下是JAXP的parser。制定非凡的parser可用如下形式SAXBuilder parser   = new SAXBuilder("org.apache.crimson.parser.XMLReaderImpl"); Document doc = parser.build("http://www.cafeconleche.org/"); // work with the document...JDOM也支持TRaX:XSLT可通過JDOMSource以及JDOMResult類來轉(zhuǎn)換(參見以后章節(jié))2.注重在JDOM里文檔(Document)類由org.JDOM.Document 來表示。這要與org.w3c.dom中的Document區(qū)別開,這2種格式如何轉(zhuǎn)換在后面會(huì)說明。以下如無(wú)特指均指JDOM里的Document。四、JDOM主要使用方法1.Ducument類(1)Document的操作方法:Element root = new Element("GREETING");Document doc = new Document(root);root.setText("Hello JDOM!");或者簡(jiǎn)單的使用Document doc = new Document(new Element("GREETING").setText("Hello JDOM!t"));這點(diǎn)和DOM不同。Dom則需要更為復(fù)雜的代碼,如下:DocumentBuilderFactory factory =DocumentBuilderFactory.newInstance();DocumentBuilder builder =factory.newDocumentBuilder();Document doc = builder.newDocument();Element root =doc.createElement("root");Text text = doc.createText("This is the root");root.appendChild(text);doc.appendChild(root);注重事項(xiàng):JDOM不答應(yīng)同一個(gè)節(jié)點(diǎn)同時(shí)被2個(gè)或多個(gè)文檔相關(guān)聯(lián),要在第2個(gè)文檔中使用原來老文檔中的節(jié)點(diǎn)的話。首先需要使用detach()把這個(gè)節(jié)點(diǎn)分開來。(2)從文件、流、系統(tǒng)ID、URL得到Document對(duì)象:DOMBuilder builder = new DOMBuilder();Document doc = builder.build(new File("jdom_test.xml"));SAXBuilder builder = new SAXBuilder();Document doc = builder.build(url);在新版本中DOMBuilder 已經(jīng)Deprecated掉 DOMBuilder.builder(url),用SAX效率會(huì)比較快。這里舉一個(gè)小例子,為了簡(jiǎn)單起見,使用String對(duì)象直接作為xml數(shù)據(jù)源: public jdomTest() {    String textXml = null;    textXml = "<note>";    textXml = textXml +        "<to>aaa</to><from>bbb</from><heading>ccc</heading><body>ddd</body>";    textXml = textXml + "</note>";    SAXBuilder builder = new SAXBuilder();    Document doc = null;    Reader in= new StringReader(textXml);    try {      doc = builder.build(in);      Element root = doc.getRootElement();      List ls = root.getChildren();//注重此處取出的是root節(jié)點(diǎn)下面的一層的Element集合      for (Iterator iter = ls.iterator(); iter.hasNext(); ) {        Element el = (Element) iter.next();        if(el.getName().equals("to")){         System.out.println(el.getText());        }      }    }    catch (IOException ex) {      ex.printStackTrace();    }    catch (JDOMException ex) {      ex.printStackTrace();    }  }(3)DOM的document和JDOM的Document之間的相互轉(zhuǎn)換使用方法,簡(jiǎn)單!DOMBuilder builder = new DOMBuilder();org.jdom.Document jdomDocument = builder.build(domDocument);DOMOutputter converter = new DOMOutputter();// work with the JDOM document&hellip;org.w3c.dom.Document domDocument = converter.output(jdomDocument);// work with the DOM document…2.XML文檔輸出XMLOutPutter類:JDOM的輸出非常靈活,支持很多種io格式以及風(fēng)格的輸出Document doc = new Document(...);XMLOutputter outp = new XMLOutputter();outp.output(doc, fileOutputStream); // Raw outputoutp.setTextTrim(true); // Compressed outputoutp.output(doc, socket.getOutputStream());outp.setIndent(" ");// Pretty outputoutp.setNewlines(true);outp.output(doc, System.out);具體請(qǐng)參閱最新的JDOM API手冊(cè)3.Element 類:(1)瀏覽Element樹Element root = doc.getRootElement();//獲得根元素elementList allChildren = root.getChildren();// 獲得所有子元素的一個(gè)listList namedChildren = root.getChildren("name");// 獲得指定名稱子元素的listElement child = root.getChild("name");//獲得指定名稱的第一個(gè)子元素JDOM給了我們很多很靈活的使用方法來治理子元素(這里的List是java.util.List)List allChildren = root.getChildren();allChildren.remove(3); // 刪除第四個(gè)子元素allChildren.removeAll(root.getChildren("jack"));// 刪除叫“jack”的子元素root.removeChildren("jack"); // 便捷寫法allChildren.add(new Element("jane"));// 加入root.addContent(new Element("jane")); // 便捷寫法allChildren.add(0, new Element("first"));(2)移動(dòng)Elements:在JDOM里很簡(jiǎn)單Element movable = new Element("movable");parent1.addContent(movable); // placeparent1.removeContent(movable); // removeparent2.addContent(movable); // add在Dom里Element movable = doc1.createElement("movable");parent1.appendChild(movable); // placeparent1.removeChild(movable); // removeparent2.appendChild(movable); // 出錯(cuò)!補(bǔ)充:糾錯(cuò)性JDOM的Element構(gòu)造函數(shù)(以及它的其他函數(shù))會(huì)檢查element是否合法。而它的add/remove方法會(huì)檢查樹結(jié)構(gòu),檢查內(nèi)容如下:1.在任何樹中是否有回環(huán)節(jié)點(diǎn)2.是否只有一個(gè)根節(jié)點(diǎn)3.是否有一致的命名空間(Namespaces) (3)Element的text內(nèi)容讀取<description>A cool demo</description>// The text is directly available// Returns "/n A cool demo/n"String desc = element.getText();// There's a convenient shortcut// Returns "A cool demo"String desc = element.getTextTrim();(4)Elment內(nèi)容修改element.setText("A new description");3.可正確解釋非凡字符element.setText("<xml> content");4.CDATA的數(shù)據(jù)寫入、讀出element.addContent(new CDATA("<xml> content"));String noDifference = element.getText();


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 蕉岭县| 大荔县| 台南县| 马公市| 天镇县| 精河县| 锡林郭勒盟| 忻州市| 铁岭县| 仁怀市| 苏州市| 句容市| 双城市| 宜良县| 江源县| 岑巩县| 府谷县| 大化| 涞水县| 武鸣县| 衡东县| 浦城县| 莆田市| 江城| 华容县| 江山市| 扶风县| 北京市| 社旗县| 洛南县| 栾城县| 山东省| 桃源县| 浙江省| 肥东县| 乐亭县| 蕉岭县| 临高县| 木里| 孙吴县| 甘德县|