欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java中JDom解析XML_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

 更新時(shí)間:2017年07月31日 10:56:01   投稿:mrr  
JDOM是一種解析XML的Java工具包。DOM適合于當(dāng)今流行的各種語(yǔ)言,包括Java,JavaScripte,VB,VBScript,Perl,C,C++等。下面通過(guò)本文給大家介紹Java中JDom解析XML的方法,感興趣的朋友一起學(xué)習(xí)吧

一、前言

    JDOM是Breet Mclaughlin和Jason Hunter兩大Java高手的創(chuàng)作成果,2000年初,JDOM作為一個(gè)開(kāi)放源代碼項(xiàng)目正式開(kāi)始研發(fā)。JDOM是一種解析XML的Java工具包。

    DOM適合于當(dāng)今流行的各種語(yǔ)言,包括Java,JavaScripte,VB,VBScript,Perl,C,C++等。它了為HTML和XML文檔提供了一個(gè)可應(yīng)用于不同平臺(tái)的編程接口。W3C DOM的最新信息可從http://www.w3.org/TR2001/WD-DOM-Lever-3-Core-20010913查閱。微軟在http://msdn.microsoft.com/library/default.asp?url=/library/en-us/xmlsdk30/htm/xmconxmldomuserguide.asp上也有DOM的詳細(xì)技術(shù)信息。

DOM的設(shè)計(jì)為了適用于不同的語(yǔ)言,它保留了不同語(yǔ)言中非常相似的API。但是它并不適合于Java編程者的習(xí)慣。而JDOM作為一種輕量級(jí)API被制定,它最核心的要求是以Java為中心,只適合于Java語(yǔ)言,它遵循DOM的接口主要規(guī)則,除去了DOM中為了兼容各語(yǔ)言而與Java習(xí)慣的不同。

二、使用JDOM的前提條件

   須要有SAX、DOM解析器的類文件,JDOM只是一種適合Java程序員來(lái)使用的Java XML解析器,目前流行的Java XML解析器還有:Apache Xerces Java、JAXP。

Xerces Java解析器是完全用Java編寫的XML解析器,最新版本是2.5,它支持以下標(biāo)準(zhǔn)和API:

(1) XML1.0規(guī)范(第二版本)

(2) XML命名空間規(guī)范

(3) DOM2核心標(biāo)準(zhǔn)規(guī)范

(4) SAX2核心擴(kuò)展

(5) JAXP1.2 :是Sun提供的使用Java處理XML的接口API。

(6) XML Schema結(jié)構(gòu)和數(shù)據(jù)類型標(biāo)準(zhǔn)

      還有最好的是它開(kāi)放源代碼,我們可以在http://xml.apache.org/dist/xerces-j/ 處去下載。下載文件Xerces-J-bin.2.5.0.zip。

解壓下載文件,得到四個(gè)壓縮包加到項(xiàng)目的路徑中(其實(shí)不要全加,但不熟的情況下考慮這么做)。

JDOM的二進(jìn)制版本下載:http://www.jdom.org/downloads/index.html

把解壓后的jdom.jar文件加到項(xiàng)目的類路徑中,另外便于調(diào)試,還要下載它的源代碼。

三、使用JDOM解析XML

     好了,現(xiàn)在該是正題了。下面通過(guò)一個(gè)簡(jiǎn)單的例子說(shuō)明一下怎么用JDOM這一適合Java程序員習(xí)慣的工具包來(lái)解析XML文檔。

為了簡(jiǎn)單,我用了如下XML作為要解析的XML文件:

<?xml version="1.0" encoding="gb2312"?>
<books>
  <book email="zhoujunhui">
   <name>rjzjh</name>
   <price>60.0</price>
 </book>
</books>

夠簡(jiǎn)單的吧,但它對(duì)于我們關(guān)心的東西都有了,子節(jié)點(diǎn),屬性。

下面是用于解析這個(gè)XML文件的Java文件:

 public class JDomParse {
 public JDomParse(){
 String xmlpath="library.xml";
 SAXBuilder builder=new SAXBuilder(false);
 try {
  Document doc=builder.build(xmlpath);
  Element books=doc.getRootElement();
  List booklist=books.getChildren("book");
  for (Iterator iter = booklist.iterator(); iter.hasNext();) {
  Element book = (Element) iter.next();
  String email=book.getAttributeValue("email");
  System.out.println(email);
  String name=book.getChildTextTrim("name");
  System.out.println(name);
  book.getChild("name").setText("alterrjzjh");
  
  }
  
  XMLOutputter outputter=new XMLOutputter();
  outputter.output(doc,new FileOutputStream(xmlpath));
  
 } catch (JDOMException e) {
  e.printStackTrace();
 } catch (IOException e) {
  e.printStackTrace();
 }
 }
 public static void main(String[] args) {
 new JDomParse();
 }
}

    

不到30行代碼,現(xiàn)在我對(duì)代碼解釋一下:

四、解釋代碼

引用的類:

import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Iterator;
import java.util.List;
//下面是引用到JDOM中的類
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jdom.input.SAXBuilder;
import org.jdom.output.XMLOutputter;

(1)使用JDOM首先要指定使用什么解析器。如:

        SAXBuilder builder=new SAXBuilder(false); 這表示使用的是默認(rèn)的解析器

(2)得到Document,我們以后要進(jìn)行的所有操作都是對(duì)這個(gè)Document操作的:

  Document doc=builder.build(xmlpath);

(3)得到根元素:

 Element books=doc.getRootElement();

在JDOM中所有的節(jié)點(diǎn)(DOM中的概念)都是一個(gè)org.jdom.Element類,當(dāng)然他的子節(jié)點(diǎn)也是一個(gè)org.jdom.Element類。

(4)得到元素(節(jié)點(diǎn))的集合:     

 List booklist=books.getChildren("book");

這表示得到“books”元素的所在名稱為“book”的元素,并把這些元素都放到一個(gè)List集合中

(5)輪循List集合 

  for (Iterator iter = booklist.iterator(); iter.hasNext();) {
    Element book = (Element) iter.next();
  }

還有一種輪循方法是:   

 for(int i=0;I<booklist.size();I++){
   Element book=(Element)booklist.get(i);
  }

(6)取得元素的屬性: 

  String email=book.getAttributeValue("email");

   取得元素book的屬性名為“email”的屬性值。

(7)取得元素的子元素(為最低層元素)的值: 

 String name=book.getChildTextTrim("name");

    注意的是,必須確定book元素的名為“name”的子元素只有一個(gè)。

(8)改變?cè)兀樽畹蛯釉兀┑闹担?nbsp;

book.getChild("name").setText("alterrjzjh");

    這只是對(duì)Document的修改,并沒(méi)有在實(shí)際的XML文檔中進(jìn)行修改

(9)保存Document的修改到XML文件中:

  XMLOutputter outputter=new XMLOutputter();
  outputter.output(doc,new FileOutputStream(xmlpath));

我們先要有一個(gè)XMLOutputter類,再把已經(jīng)修改了的Document保存進(jìn)XML文檔中。

相關(guān)文章

  • Java之Runnable啟動(dòng)線程的使用方式

    Java之Runnable啟動(dòng)線程的使用方式

    這篇文章主要介紹了Java之Runnable啟動(dòng)線程的使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • Java自定義類加載器實(shí)現(xiàn)類隔離詳解

    Java自定義類加載器實(shí)現(xiàn)類隔離詳解

    由于每種組件的不同版本所依賴的jar包不同,我們可以借鑒tomcat的實(shí)現(xiàn)方式,通過(guò)自定義類加載器打破雙親委派機(jī)制來(lái)實(shí)現(xiàn)類隔離,從而達(dá)到操作多組件多版本的目的。本文就來(lái)和大家詳細(xì)聊聊實(shí)現(xiàn)方法
    2023-03-03
  • tdesign的文件上傳功能實(shí)現(xiàn)(微信小程序+idea的springboot)

    tdesign的文件上傳功能實(shí)現(xiàn)(微信小程序+idea的springboot)

    這篇文章主要介紹了tdesign的文件上傳(微信小程序+idea的springboot)的相關(guān)知識(shí),本文通過(guò)圖文實(shí)例代碼相結(jié)合給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2023-09-09
  • Java編程實(shí)現(xiàn)從給定范圍內(nèi)隨機(jī)N個(gè)不重復(fù)數(shù)生成隨機(jī)數(shù)的方法小結(jié)

    Java編程實(shí)現(xiàn)從給定范圍內(nèi)隨機(jī)N個(gè)不重復(fù)數(shù)生成隨機(jī)數(shù)的方法小結(jié)

    這篇文章主要介紹了Java編程實(shí)現(xiàn)從給定范圍內(nèi)隨機(jī)N個(gè)不重復(fù)數(shù)生成隨機(jī)數(shù)的方法,結(jié)合實(shí)例形式較為詳細(xì)的分析了java根據(jù)指定范圍生成不重復(fù)隨機(jī)數(shù)的相關(guān)操作技巧,需要的朋友可以參考下
    2017-04-04
  • Java高性能序列化工具Kryo詳情

    Java高性能序列化工具Kryo詳情

    這篇文章主要介紹了Java高性能序列化工具Kryo詳情,Kryo?是一個(gè)快速序列化/反序列化工具,依賴于字節(jié)碼生成機(jī)制,更多相關(guān)內(nèi)容感興趣的朋友可以參考一下下面文章內(nèi)容
    2022-06-06
  • 一文帶你搞懂Java單例模式

    一文帶你搞懂Java單例模式

    單例就是單實(shí)例的意思,即在系統(tǒng)全局,一個(gè)類只創(chuàng)建一個(gè)對(duì)象,并且在系統(tǒng)全局都可以訪問(wèn)這個(gè)對(duì)象而不用重新創(chuàng)建。本文將通過(guò)示例為大家詳細(xì)講解Java單例模式的使用,需要的可以參考一下
    2022-11-11
  • springboot接收前端參數(shù)的四種方式圖文詳解

    springboot接收前端參數(shù)的四種方式圖文詳解

    Spring Boot可以通過(guò)多種方式接收前端傳遞的數(shù)據(jù),下面這篇文章主要給大家介紹了關(guān)于springboot接收前端參數(shù)的四種方式,文中通過(guò)圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2023-11-11
  • Java8中Optional的使用方法詳解

    Java8中Optional的使用方法詳解

    這篇文章主要介紹了Java8中Optional的使用方法詳解,傳統(tǒng)的寫代碼方式經(jīng)常會(huì)遇到NullPointerException,這就需要我們?cè)诖a中經(jīng)常判空,而判空的寫法又會(huì)顯得很累贅,這里就可以用到Optional來(lái)簡(jiǎn)化代碼,需要的朋友可以參考下
    2024-01-01
  • Java經(jīng)典面試題最全匯總208道(四)

    Java經(jīng)典面試題最全匯總208道(四)

    這篇文章主要介紹了Java經(jīng)典面試題最全匯總208道(四),本文章內(nèi)容詳細(xì),該模塊分為了六個(gè)部分,本次為第四部分,需要的朋友可以參考下
    2023-01-01
  • 淺談Java虛擬機(jī)對(duì)內(nèi)部鎖的四種優(yōu)化方式

    淺談Java虛擬機(jī)對(duì)內(nèi)部鎖的四種優(yōu)化方式

    這篇文章主要介紹了淺談Java虛擬機(jī)對(duì)內(nèi)部鎖的四種優(yōu)化方式,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-10-10

最新評(píng)論