新书推介:《语义网技术体系》
作者:瞿裕忠,胡伟,程龚
   XML论坛     W3CHINA.ORG讨论区     计算机科学论坛     SOAChina论坛     Blog     开放翻译计划     新浪微博  
 
  • 首页
  • 登录
  • 注册
  • 软件下载
  • 资料下载
  • 核心成员
  • 帮助
  •   Add to Google

    >> 本版讨论Java, J2SE, J2ME, J2EE, 以及Eclipse, NetBeans, JBuilder等Java开发环境,还有JSP, JavaServlet, JavaBean, EJB以及struts, hibernate, spring, webwork2, Java 3D, JOGL等相关技术。
    [返回] 计算机科学论坛计算机技术与应用『 Java/Eclipse 』 → Jdom使用指南[转帖] 查看新帖用户列表

      发表一个新主题  发表一个新投票  回复主题  (订阅本版) 您是本帖的第 6551 个阅读者浏览上一篇主题  刷新本主题   树形显示贴子 浏览下一篇主题
     * 贴子主题: Jdom使用指南[转帖] 举报  打印  推荐  IE收藏夹 
       本主题类别:     
     xiongbajian 帅哥哟,离线,有人找我吗?处女座1983-8-26
      
      
      头衔:低头赶路
      等级:大三(面向对象是个好东东!)
      文章:131
      积分:690
      门派:XML.ORG.CN
      注册:2005/10/21

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给xiongbajian发送一个短消息 把xiongbajian加入好友 查看xiongbajian的个人资料 搜索xiongbajian在『 Java/Eclipse 』的所有贴子 引用回复这个贴子 回复这个贴子 查看xiongbajian的博客楼主
    发贴心情 Jdom使用指南[转帖]

    对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       包含了将jdomxml文档接口转换为其他xml文档接口

    org.jdom.xpath           包含了对xml文档xpath操作的类

    下面将通过一个例子介绍jdom的常用操作

    生成xml文档:

    下面的类将生成一个xml文档:

    /*

    *Createdon2004-10-9

    *

    *写入xml文件的例子

    */

    /**

    *@authorlnman

    *

    *Tochangethetemplateforthisgeneratedtypecommentgoto

    *Window>Preferences>Java>CodeGeneration>CodeandComments

    */

    importjava.io.*;

    importorg.jdom.*;

    importorg.jdom.output.*;

    publicclassWriteXML

    {

       publicvoidBuildXML()throwsException

       {

           Elementroot,student,number,name,age;

                   

           root=newElement("student-info");//生成根元素:student-info  

           student=newElement("student");     //生成元素:student,该元素中将包含元素number,name,age

           number=newElement("number");

           name=newElement("name");

           age=newElement("age");

           

           Documentdoc=newDocument(root);   //将根元素植入文档doc中

           

           number.setText("001");

           name.setText("lnman");

           age.setText("24");

           student.addContent(number);

           student.addContent(name);

           student.addContent(age);

           root.addContent(student);

           

           Formatformat=Format.getCompactFormat();

           format.setEncoding("gb2312");          //设置xml文件的字符为gb2312

           format.setIndent("   ");              //设置xml文件的缩进为4个空格

           

           XMLOutputterXMLOut=newXMLOutputter(format);//在元素后换行,每一层元素缩排四格

           XMLOut.output(doc,newFileOutputStream("studentinfo.xml"));

           

       }

       

       publicstaticvoidmain(String[]args)throwsException

       {

           WriteXMLw=newWriteXML();

           System.out.println("NowwebuildanXMLdocument.....");

           w.BuildXML();

           System.out.println("finished!");

       }

    }

    生成的xml文档为:

    <?xmlversion="1.0"encoding="gb2312"?>

    <student-info>

       <student>

           <number>001</number>

           <name>lnman</name>

           <age>24</age>

       </student>

    </student-info>

    读取xml文档的例子:

    /*

    *Createdon2004-10-9

    *

    *用jdom读取xml文档的例子

    *

    */

    /**

    *@authorlnman

    *

    *Tochangethetemplateforthisgeneratedtypecommentgoto

    *Window&gt;Preferences&gt;Java&gt;CodeGeneration&gt;CodeandComments

    */

    importorg.jdom.output.*;

    importorg.jdom.input.*;

    importorg.jdom.*;

    importjava.io.*;

    importjava.util.*;

    publicclassReadXML

    {

       

       publicstaticvoidmain(String[]args)throwsException

       {

           

           

           SAXBuilderbuilder=newSAXBuilder();

           Documentread_doc=builder.build("studentinfo.xml");

           Elementstu=read_doc.getRootElement();

           Listlist=stu.getChildren("student");

           for(inti=0;i<list.size();i++)

           {

               Elemente=(Element)list.get(i);

               Stringstr_number=e.getChildText("number");

               Stringstr_name=e.getChildText("name");

               Stringstr_age=e.getChildText("age");

               System.out.println("---------STUDENT--------------");

               System.out.println("NUMBER:"+str_number);

               System.out.println("NAME:"+str_name);

               System.out.println("AGE:"+str_age);

               System.out.println("------------------------------");

               System.out.println();

           }      

       }

    }

    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>

    处理程序:
    import java.io.*;
    import java.util.*;
    import org.jdom.*;
    import org.jdom.input.*;
    import org.jdom.output.*;
    import org.jdom.xpath.*;

    /**
    * <p><code>XPathReader</code> demonstrates how to
    *   read a Servlet 2.2 Web Archive file using XPath.
    * </p>
    *
    * @author Jason Hunter
    * @version 1.0
    */
    public class XPathReader {
        
        public static void main(String[] args) throws IOException, JDOMException {
            if (args.length != 1) {
                System.err.println("Usage: java XPathReader web.xml");
                return;
            }
            String filename = args[0];//从命令行输入web.xml
            PrintStream out = System.out;

            SAXBuilder builder = new SAXBuilder();
            Document doc = builder.build(new File(filename));//得到Document对象

            // Print servlet information
            XPath servletPath = XPath.newInstance("//servlet");//,选择任意路径下servlet元素
            List servlets = servletPath.selectNodes(doc);//返回所有的servlet元素。

            out.println("This WAR has "+ servlets.size() +" registered servlets:");
            Iterator i = servlets.iterator();
            while (i.hasNext()) {//输出servlet信息
                Element servlet = (Element) i.next();
                out.print("\t" + servlet.getChild("servlet-name")
                                        .getTextTrim() +
                          " for " + servlet.getChild("servlet-class")
                                           .getTextTrim());
                List initParams = servlet.getChildren("init-param");
                out.println(" (it has " + initParams.size() + " init params)");
            }
                
            // Print security role information
            XPath rolePath = XPath.newInstance("//security-role/role-name/text()");
            List roleNames = rolePath.selectNodes(doc);//得到所有的角色名

            if (roleNames.size() == 0) {
                out.println("This WAR contains no roles");
            } else {
                out.println("This WAR contains " + roleNames.size() + " roles:");
                i = roleNames.iterator();
                while (i.hasNext()) {//输出角色名
                    out.println("\t" + ((Text)i.next()).getTextTrim());
                }
            }
        }    
    }

    输出结果:
    C:\java>java   XPathReader web.xml
    This WAR has 2 registered servlets:
            snoop for SnoopServlet (it has 0 init params)
            file for ViewFile (it has 1 init params)
    This WAR contains 3 roles:
            manager
            director
            president


    (http://hostchains.com/community/forums/147705/printpost.aspx)


       收藏   分享  
    顶(0)
      




    ----------------------------------------------
    恰恰首页:http://www.qaqaa.com

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2006/2/28 21:30:00
     
     GoogleAdSense处女座1983-8-26
      
      
      等级:大一新生
      文章:1
      积分:50
      门派:无门无派
      院校:未填写
      注册:2007-01-01
    给Google AdSense发送一个短消息 把Google AdSense加入好友 查看Google AdSense的个人资料 搜索Google AdSense在『 Java/Eclipse 』的所有贴子 访问Google AdSense的主页 引用回复这个贴子 回复这个贴子 查看Google AdSense的博客广告
    2024/9/21 11:09:24

    本主题贴数1,分页: [1]

    管理选项修改tag | 锁定 | 解锁 | 提升 | 删除 | 移动 | 固顶 | 总固顶 | 奖励 | 惩罚 | 发布公告
    W3C Contributing Supporter! W 3 C h i n a ( since 2003 ) 旗 下 站 点
    苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
    78.125ms