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
    -----------------------------------
  • 相关阅读:
    OSCP Learning Notes Buffer Overflows(3)
    OSCP Learning Notes Buffer Overflows(5)
    OSCP Learning Notes Exploit(3)
    OSCP Learning Notes Exploit(4)
    OSCP Learning Notes Exploit(1)
    OSCP Learning Notes Netcat
    OSCP Learning Notes Buffer Overflows(4)
    OSCP Learning Notes Buffer Overflows(1)
    OSCP Learning Notes Exploit(2)
    C++格式化输出 Learner
  • 原文地址:https://www.cnblogs.com/msql/p/5548128.html
Copyright © 2011-2022 走看看