CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Java >  J2SE / 基础类

使用JDOM怎么生成根元素以外的东西

楼主ghw(大浪淘沙)2002-05-21 11:30:10 在 Java / J2SE / 基础类 提问

使用JDOM怎么生成根元素以外的东西,比如我要在生成的xml文件的前两行指定:  
  <?xml   version="1.0"   encoding="GB2312"?>  
  <?xml:stylesheet   type="text/xsl"   href="../xsl/ICP_Contact.xsl"?>  
   
   
  应该怎么实现?      
   
  刚用JDOM,哪位知道比较好的网站介绍它的? 问题点数:100、回复次数:5Top

1 楼ghw(大浪淘沙)回复于 2002-05-21 12:02:54 得分 0

帮我up一下Top

2 楼Dickensi(流星·逐日)(★★★★)回复于 2002-05-21 12:09:52 得分 100

用JDOM处理XML文档  
   
  关键词:Java、JDOM、XML、JAXB  
  欢迎与我讨论(boyofjava@sina.com)  
   
  (一)JDOM的介绍以及与JAXB的比较  
   
  Java   +   XML   =   JDOM   !  
  这就是JDOM设计者的目标。如果你曾经使用过烦人的SAX或是DOM来处理XML,你就会知道为什么要有JDOM或者是JAXB。在今年(2002)的JavaOne会议上JDOM的主要创始人Jason   Hunter有一篇精彩的演讲介绍了JDOM技术,题目就是JDOM   Makes   XML   Easy。  
  在那篇文档里,JDOM被拿来与DOM比较,而我更愿意拿它同JAXB比较。因为JAXB和JDOM都是为了在Java中提供比DOM和SAX更为方便的XML处理接口而开发的,并且通过完全不同的途径来解决这个问题。JDOM的处理方式是与DOM类似的树操作。而JAXB通过DTD和绑定模式来生成访问XML文档的Java代码,将XML映射成了Java对象来操作。你可以根据项目的需要和个人喜好来决定采用哪一个。  
  JDOM与JAXB的比较,从本身的特点来看:  
  1)   JDOM比JAXB更容易上手。使用JAXB首先要会编写DTD,然后还要会编写绑定模式。JDOM没有这样的要求,如果你会Java和XML,甚至可以说光是看JDOM的javadoc文档就能够使用JDOM。  
  2)   JAXB编写好DTD和绑定模式以后,XML文档被映射成了Java对象,其数据就是Java对象的属性,连数据类型都做好了转换,因此,访问XML文档比JDOM要简便,可以说是一劳永逸。  
  3)   JAXB由某个DTD和绑定模式生成的代码只能访问该DTD所约束的文档。如果想要访问其他XML文档,需要再编写DTD和绑定模式。JDOM可以处理任何XML文档,包括受约束的和不受约束的。  
   
  目前JDOM和JAXB都没有正式版本。JDOM的最新版本是beta8,JAXB是1.0   early   access,其规范版本是0.21。相对而言,JDOM更成熟一些。例如JAXB不支持名字空间、不能向XML文档写入处理指令,有时我们需要保留的换行符和首尾空格在JAXB中自动过滤掉了,就连放在<![CDATA[   和   ]]>里面也不能幸免。JDOM就没有这些限制。如果说以上的3点比较是JDOM和JAXB本身的特点所决定的,几乎不可能改变,那么这里表明,JAXB还需要更多的工作。  
   
  (二)获得并安装JDOM  
  在http://jdom.org可以下载JDOM的最新版本。以JDOM   beta8的2进制版本为例。下载后解压缩,JDOM的jar文件就是build目录下的文件jdom.jar,将之加入类路径。另外JDOM还需要lib目录下那些jar文件如xerces.jar的支持。如果在使用中出现以下错误:  
  java.lang.NoSuchMethodError  
  或    
  java.lang.NoClassDefFoundError:   org/xml/sax/SAXNotRecognizedException  
  你需要保证xerces.jar文件在CLASSPATH中位于其他XML类,如JAXP或Crimson之前,这些类文件,包括以前老版本的xerces,可能不支持SAX2.0或DOM   Level   2。于是导致了上面的错误。  
   
  (三)一个简单的例子  
  JDOM的处理方式有些类似于DOM,但它主要是用SAX实现的,你不必担心处理速度和内存的问题。另外,JDOM中几乎没有接口,的类全部是实实在在的类,没有类工厂类的。其最重要的一个包org.jdom中主要有以下类:  
  ?   Attribute  
  ?   CDATA  
  ?   Comment  
  ?   DocType  
  ?   Document  
  ?   Element  
  ?   EntityRef  
  ?   Namespace  
  ?   ProcessingInstruction  
  ?   Text  
  数据输入要用到XML文档要通过org.jdom.input包,反过来需要org.jdom.output。如前面所说,关是看API文档就能够使用。  
  我们的例子读入XML文件exampleA.xml,加入一条处理指令,修改第一本书的价格和作者,并添加一条属性,然后写入文件exampleB.xml:  
  //exampleA.xml  
  <?xml   version="1.0"   encoding="GBK"?>  
  <bookList>  
          <book>  
                  <name>Java编程入门</name>  
                  <author>张三</author>  
                  <publishDate>2002-6-6</publishDate>  
                  <price>35.0</price>  
          </book>  
          <book>  
                  <name>XML在Java中的应用</name>  
                  <author>李四</author>  
                  <publishDate>2002-9-16</publishDate>  
                  <price>92.0</price>  
          </book>  
  </bookList>  
   
  //testJDOM.java  
  import   org.jdom.*;  
  import   org.jdom.output.*;  
  import   org.jdom.input.*;  
  import   java.io.*;  
  public   class   TestJDOM{  
          public   static   void   main(String   args[])throws   Exception{  
                   
                  SAXBuilder   sb   =   new   SAXBuilder();  
   
                  //从文件构造一个Document,因为XML文件中已经指定了编码,所以这里不必了  
                  Document   doc   =   sb.build(new   FileInputStream("exampleA.xml"));  
                   
                  //加入一条处理指令  
                  ProcessingInstruction   pi   =   new   ProcessingInstruction  
                          ("xml-stylesheet","href=\"bookList.html.xsl\"   type=\"text/xsl\"");  
                  doc.addContent(pi);  
   
   
                  Element   root   =   doc.getRootElement();   //得到根元素  
                  java.util.List   books   =   root.getChildren();   //得到根元素所有子元素的集合  
                  Element   book   =   (Element)books.get(0);   //得到第一个book元素  
                  //为第一本书添加一条属性  
                  Attribute   a   =   new   Attribute("hot","true");      
                  book.setAttribute(a);  
                  Element   author   =   book.getChild("author");   //得到指定的字元素  
                  author.setText("王五");   //将作者改为王五  
                  //或   Text   t   =   new   Text("王五");book.addContent(t);  
                  Element   price   =   book.getChild("price");   //得到指定的字元素  
                  //修改价格,比较郁闷的是我们必须自己转换数据类型,而这正是JAXB的优势  
                  author.setText(Float.toString(50.0f));    
                   
   
   
                  String   indent   =   "         ";  
                  boolean   newLines   =   true;  
                  XMLOutputter   outp   =   new   XMLOutputter(indent,newLines,"GBK");  
                  outp.output(doc,   new   FileOutputStream("exampleB.xml"));  
   
          }  
  };  
   
  执行结果exampleB.xml:  
  <?xml   version="1.0"   encoding="GBK"?>  
  <bookList>  
          <book   hot=”true”>  
                  <name>Java编程入门</name>  
                  <author>50.0</author>  
                  <publishDate>2002-6-6</publishDate>  
                  <price>35.0</price>  
          </book>  
          <book>  
                  <name>XML在Java中的应用</name>  
                  <author>李四</author>  
                  <publishDate>2002-9-16</publishDate>  
                  <price>92.0</price>  
          </book>  
  </bookList>  
  <?xml-stylesheet   href="bookList.html.xsl"   type="text/xsl"?>  
   
  在默认情况下,JDOM的Element类的getText()这类的方法不会过滤空白字符,如果你需要过滤,用setTextTrim()   。  
   
   
  Top

3 楼Patrick_DK(我有我的调调,就是这么屌)回复于 2002-05-21 12:49:09 得分 0

www.jdom.orgTop

4 楼ghw(大浪淘沙)回复于 2002-05-21 15:40:29 得分 0

to   dickensi(流星·逐日):  
   
  你的代码生成的<?xml-stylesheet   href="bookList.html.xsl"   type="text/xsl"?>  
  是在xml文件的末尾,这样的话不会被IE执行,不知怎么把这行生成到xml文件的第二行。  
  Top

5 楼ghw(大浪淘沙)回复于 2002-05-21 15:48:33 得分 0

不好意思,我试了试,把加入处理指令放在setRootElement之前就可以了,  
   
  谢谢!Top

相关问题

  • 用js生成html元素?
  • 生成元素问题
  • JDOM生成XML的问题
  • jdom如何生成名字空间
  • 生成XML时给节点元素加属性的问题
  • 循环生成的元素的提交问题!
  • 求教动态生成下拉框内的元素的方法
  • 遍历web页面中的动态生成的控件元素
  • javascript访问不到动态生成的子框架的内部元素吗?
  • 高分!!用JS如何自动生成网页元素的数值啊?????

关键词

  • 文档
  • 文件
  • 指令
  • 版本
  • java
  • 模式
  • 属性
  • 数据
  • jdom
  • jaxb

得分解答快速导航

  • 帖主:ghw
  • Dickensi

相关链接

  • CSDN Java频道
  • Java类图书
  • Java类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo