zoukankan      html  css  js  c++  java
  • 摘抄的 JAVA JDOM 操作XML文件

    JDOM修炼篇

    用过XERCES的程序员都会感到,有时候用一句话就可以说清楚的事,当用XERCES的API来实现时,要三四行程序。

     

    获得并安装JDOM

    在 http://www.jdom.org/可以下载JDOM的最新版本,将压缩包中的jdom.jar及lib目录下的全部jar包加入到classpath就可以了。

     

    用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("-----------------------------------");
      }  
     }
    }

    程序的输出结果:

    磁盘信息:
    分区盘符:C
    分区容量:8G
    目录数:200
    文件数:1580
    -----------------------------------
    磁盘信息:
    分区盘符:D
    分区容量:10G
    目录数:500
    文件数:3000
    -----------------------------------

    这段程序采用了传统的解析方式,一级一级的从根节点到子节点逐个采集我们所需要的数据,中规中矩。试想如果这个树足够深,我们想取第5 0层第三个节点的数据(夸张了点,呵呵),那将是一场噩梦!下面的内容将轻松化解你的这一痛苦。

     

    JDOM+XPATH进阶篇

    说了那么多JDOM和XPATH的好处,终于到了英雄有用武之地的时候了。

    JDOM的关于XPATH的api在org.jdom.xpath这个包里。看看这个包下,只有一个类,JDOM就是如此简洁,什么事都不故弄玄虚的搞得那么复杂。这个类中的核心的api主要是两个selectNodes()和selectSingleNode()。前者根据一个xpath语句返回一组节点;后者根据一个xpath语句返回符合条件的第一个节点。

    下面的程序我们用JDOM+XPATH实现了上一个程序同样的功能,你可以从中学到不少运用XPATH 的知识:

    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
    -----------------------------------
  • 相关阅读:
    Echarts Jqplot嵌extjs4 windows 装配方法
    法学类人猿生存方案--升华成掌握可能的方式
    LeetCode Merge k Sorted Lists 解决报告
    Swift
    Swift
    Swift
    Swift
    Swift
    Swift
    Swift
  • 原文地址:https://www.cnblogs.com/msql/p/5548128.html
Copyright © 2011-2022 走看看