Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 367|回复: 0

[xml学习]Jdom使用指南

[复制链接]
  • TA的每日心情
    开心
    2021-3-12 23:18
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2014-10-10 04:05:35 | 显示全部楼层 |阅读模式
         对xml文档的解析java中有很多种方法,例如使用dom、sax、jdom等等,相比之下,我觉得还是jdom比较方便。下面介绍一下jdom的基本使用方法,不对之处还请各位网友之交。谢谢!
             最新的jdom可以到他的网站:http://www.jdom.org/去下载,现在的版本是1.0版,下载之后将得到jdom-1.0.zip文件,解压后进入build文件夹将看到一个名为jdom.jar的包,这个就是jdom的类包了,将它加到你的classpath里就可以使用jdom提供的各种处理xml的类和他们的方法了。应该注意的是在解压后的文件夹里还有一个lib文件夹,里面保存的是使用jdom的环境包,不过我在我的jdk1.4下使用没引用这些包一样好用,不知道是jdk1.4中已经包含了这些东西还是原来我的eclipse已经引用了这些包,呵呵。
        好了,书归正传,现在开始介绍jdom包的使用。
         jdom包的结构包括:
        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文档接口转换为其他xml文档接口 org.jdom.xpath 包含了对xml文档xpath操作的类 下面将通过一个例子介绍jdom的常用操作
    1. 生成xml文档:
    2. 下面的类将生成一个xml文档:
    3. import java.io.*;
    4. import org.jdom.*;
    5. import org.jdom.output.*;

    6. public class WriteXML
    7. {
    8.     public void BuildXML() throws Exception
    9.     {
    10.         Element root,student,number,name,age;
    11.                
    12.         root = new Element("student-info"); //生成根元素:student-info   
    13.         student = new Element("student");      //生成元素:student,该元素中将包含元素number,name,age
    14.         number = new Element("number");
    15.         name = new Element("name");
    16.         age = new Element("age");
    17.         
    18.         Document doc = new Document(root);    //将根元素植入文档doc中
    19.         
    20.         number.setText("001");
    21.         name.setText("lnman");
    22.         age.setText("24");
    23.         student.addContent(number);
    24.         student.addContent(name);
    25.         student.addContent(age);
    26.         root.addContent(student);
    27.         
    28.         Format format = Format.getCompactFormat();
    29.         format.setEncoding("gb2312");           //设置xml文件的字符为gb2312
    30.         format.setIndent("    ");               //设置xml文件的缩进为4个空格
    31.         
    32.         XMLOutputter XMLOut = new XMLOutputter(format);//在元素后换行,每一层元素缩排四格
    33.         XMLOut.output(doc, new FileOutputStream("studentinfo.xml"));  
    34.         
    35.     }
    36.    
    37.     public static void main(String[] args) throws Exception
    38.     {
    39.         WriteXML w = new WriteXML();
    40.         System.out.println("Now we build an XML document .....");
    41.         w.BuildXML();
    42.         System.out.println("finished!");
    43.     }

    44. }
    45. 生成的xml文档为:
    复制代码
    <?xml version="1.0" encoding="gb2312"?> <student-info>    <student>      <number>001</number>      <name>lnman</name>      <age>24</age>    </student> </student-info>
    1. 读取xml文档的例子:
    2. /*
    3. * Created on 2004-10-9
    4. *
    5. *用jdom读取xml文档的例子
    6. *
    7. */

    8. /**
    9. * @author lnman
    10. *
    11. * To change the template for this generated type comment go to
    12. * Window>Preferences>Java>Code Generation>Code and Comments
    13. */
    14. import org.jdom.output.*;
    15. import org.jdom.input.*;
    16. import org.jdom.*;
    17. import java.io.*;
    18. import java.util.*;
    19. public class ReadXML
    20. {
    21.     public static void main(String[] args) throws Exception
    22.     {     
    23.         SAXBuilder builder = new SAXBuilder();
    24.         Document read_doc = builder.build("studentinfo.xml");
    25.         Element stu = read_doc.getRootElement();
    26.         List list = stu.getChildren("student");
    27.         for(int i = 0;i < list.size();i++)
    28.         {
    29.             Element e = (Element)list.get(i);
    30.             String str_number = e.getChildText("number");
    31.             String str_name = e.getChildText("name");
    32.             String str_age = e.getChildText("age");
    33.             System.out.println("---------STUDENT--------------");
    34.             System.out.println("NUMBER:" + str_number);
    35.             System.out.println("NAME:" + str_name);
    36.             System.out.println("AGE:" + str_age);
    37.             System.out.println("------------------------------");
    38.             System.out.println();
    39.         }      
    40.     }
    41. }

    42. Xpath例子:
    复制代码
          JDOM的关于XPATH的api在org.jdom.xpath这个包里。这个包下,有一个抽象类XPath.java和实现类JaxenXPath.java, 使用时先用XPath类的静态方法newInstance(String xpath)得到XPath对象,然后调用它的selectNodes(Object context)方法或selectSingleNode(Object context)方法,前者根据xpath语句返回一组节点(List对象);后者根据一个xpath语句返回符合条件的第一个节点(Object类型)。请看jdom-1.0自带的范例程序:
    它分析在web.xml文件中的注册的Servlet的个数及参数个数,并输出角色名。
    web.xml文件:
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <!--
    <!DOCTYPE web-app
    PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN"
    "http://java.sun.com/j2ee/dtds/web-app_2.2.dtd">
    -->  <web-app>
      <servlet>
       <servlet-name>snoop</servlet-name>
       <servlet-class>SnoopServlet</servlet-class>
      </servlet>
      <servlet>
        <servlet-name>file </servlet-name>
        <servlet-class>ViewFile</servlet-class>
        <init-param>
         <param-name>initial</param-name>
         <param-value>1000</param-value>
         <description>The initial value for the counter <!-- optional --></description>
       </init-param>
      </servlet>
      <servlet-mapping>
        <servlet-name>mv</servlet-name>
        <url-pattern>*.wm</url-pattern>
      </servlet-mapping>
    <distributed/>   <security-role>
        <role-name>manager</role-name>
         <role-name>director</role-name>
         <role-name>president</role-name>
    </security-role>
    </web-app>
    1. 处理程序:
    2. import java.io.*;
    3. import java.util.*;
    4. import org.jdom.*;
    5. import org.jdom.input.*;
    6. import org.jdom.output.*;
    7. import org.jdom.xpath.*;
    8. public class XPathReader {
    9.      
    10.     public static void main(String[] args) throws IOException, JDOMException {
    11.         if (args.length != 1) {
    12.             System.err.println("Usage: java XPathReader web.xml");
    13.             return;
    14.         }
    15.         String filename = args[0];//从命令行输入web.xml
    16.         PrintStream out = System.out;
    17.         SAXBuilder builder = new SAXBuilder();
    18.         Document doc = builder.build(new File(filename));//得到Document对象
    19.         // Print servlet information
    20.         XPath servletPath = XPath.newInstance("//servlet");//,选择任意路径下servlet元素
    21.         List servlets = servletPath.selectNodes(doc);//返回所有的servlet元素。
    22.         out.println("This WAR has "+ servlets.size() +" registered servlets:");
    23.         Iterator i = servlets.iterator();
    24.         while (i.hasNext()) {//输出servlet信息
    25.             Element servlet = (Element) i.next();
    26.             out.print("        " + servlet.getChild("servlet-name")
    27.                                     .getTextTrim() +
    28.                       " for " + servlet.getChild("servlet-class")
    29.                                        .getTextTrim());
    30.             List initParams = servlet.getChildren("init-param");
    31.             out.println(" (it has " + initParams.size() + " init params)");  
    32.         }
    33.             
    34.         // Print security role information
    35.         XPath rolePath = XPath.newInstance("//security-role/role-name/text()");
    36.         List roleNames = rolePath.selectNodes(doc);//得到所有的角色名
    37.         if (roleNames.size() == 0) {
    38.             out.println("This WAR contains no roles");
    39.         } else {
    40.             out.println("This WAR contains " + roleNames.size() + " roles:");
    41.             i = roleNames.iterator();
    42.             while (i.hasNext()) {//输出角色名
    43.                 out.println("        " + ((Text)i.next()).getTextTrim());
    44.             }
    45.         }
    46.     }     
    47. }

    48. 输出结果:
    49. C:java>java   XPathReader web.xml
    50. This WAR has 2 registered servlets:
    51.         snoop for SnoopServlet (it has 0 init params)
    52.         file for ViewFile (it has 1 init params)
    53. This WAR contains 3 roles:
    54.         manager
    55.         director
    56.         president
    复制代码
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2025-5-8 05:57 , Processed in 0.303019 second(s), 36 queries .

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc.

    快速回复 返回顶部 返回列表