摘抄的 JAVA JDOM 操做XML文件

JDOM修煉篇

用過XERCES的程序員都會感到,有時候用一句話就能夠說清楚的事,當用XERCES的API來實現時,要三四行程序。java

 

得到並安裝JDOM

在 http://www.jdom.org/能夠下載JDOM的最新版本,將壓縮包中的jdom.jar及lib目錄下的所有jar包加入到classpath就能夠了。api

 

用JDOM解析XML

JDOM模型的所有類都在org.jdom.*這個包裏,org.jdom.input.*這個包裏包含了JDOM的解析器,其中的DOMBuilder的功能是將DOM模型的Document解析成JDOM模型的Document;SAXBuilder的功能是從文件或流中解析出符合JDOM模型的XML樹。因爲咱們的上面提到的XML樣例存儲在一個名稱爲sample.xml的文件中,很顯然咱們應該採用後者做爲解析工具。下面程序演示了jdom的基本功能,即解析一個xml文檔,並挑選一些內容輸出到屏幕上。工具

import java.util.*;
import org.jdom.*;
import org.jdom.input.SAXBuilder;
public class Sample1 {
 public static void main(String[] args) throws Exception{ 
  SAXBuilder sb=new SAXBuilder();
  Document doc=sb.build("sample.xml");
  Element root=doc.getRootElement();
  List list=root.getChildren("disk");
  for(int i=0;i<list.size();i++){
   Element element=(Element)list.get(i);
   String name=element.getAttributeValue("name");
   String capacity=element.getChildText("capacity");
   String directories=element.getChildText("directories");
   String files=element.getChildText("files");
   System.out.println("磁盤信息:");
   System.out.println("分區盤符:"+name);
   System.out.println("分區容量:"+capacity);
   System.out.println("目錄數:"+directories);
   System.out.println("文件數:"+files);
   System.out.println("-----------------------------------");
  }  
 }
}

程序的輸出結果:ui

磁盤信息:
分區盤符:C
分區容量:8G
目錄數:200
文件數:1580
-----------------------------------
磁盤信息:
分區盤符:D
分區容量:10G
目錄數:500
文件數:3000
-----------------------------------

這段程序採用了傳統的解析方式,一級一級的從根節點到子節點逐個採集咱們所須要的數據,中規中矩。試想若是這個樹足夠深,咱們想取第5 0層第三個節點的數據(誇張了點,呵呵),那將是一場噩夢!下面的內容將輕鬆化解你的這一痛苦。spa

 

JDOM+XPATH進階篇

說了那麼多JDOM和XPATH的好處,終於到了英雄有用武之地的時候了。code

JDOM的關於XPATH的api在org.jdom.xpath這個包裏。看看這個包下,只有一個類,JDOM就是如此簡潔,什麼事都不故弄玄虛的搞得那麼複雜。這個類中的核心的api主要是兩個selectNodes()和selectSingleNode()。前者根據一個xpath語句返回一組節點;後者根據一個xpath語句返回符合條件的第一個節點。orm

下面的程序咱們用JDOM+XPATH實現了上一個程序一樣的功能,你能夠從中學到很多運用XPATH 的知識:xml

import java.util.*;
import org.jdom.*;
import org.jdom.input.SAXBuilder;
import org.jdom.xpath.XPath;
public class Sample2 {  
 public static void main(String[] args) throws Exception {
  SAXBuilder sb = new SAXBuilder();
  Document doc = sb.build("sample.xml");
  Element root = doc.getRootElement();
  List list = XPath.selectNodes(root, "/HD/disk");
  for (int i = 0; i < list.size(); i++) { 
   Element disk_element = (Element) list.get(i);
   String name = disk_element.getAttributeValue("name");
   String capacity = ( (Text) XPath.selectSingleNode(disk_element, 
    "//disk[@name='" + name + "']/capacity/text()")).getTextNormalize();
   String directories = ( (Text) XPath.selectSingleNode(disk_element,  
    "//disk[@name='" + name + "']/directories/text()")).getTextNormalize();
   String files = ( (Text) XPath.selectSingleNode(disk_element,  
    "//disk[@name='" + name + "']/files/text()")).getTextNormalize();
   System.out.println("磁盤信息:");
   System.out.println("分區盤符:" + name);
   System.out.println("分區容量:" + capacity);
   System.out.println("目錄數:" + directories);
   System.out.println("文件數:" + files);
   System.out.println("-----------------------------------");
  }
 }
}

輸出結果:

磁盤信息:
分區盤符:C
分區容量:8G
目錄數:200
文件數:1580
-----------------------------------
磁盤信息:
分區盤符:D
分區容量:10G
目錄數:500
文件數:3000
-----------------------------------
相關文章
相關標籤/搜索