jdom解析xml

 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中自动过滤掉了,就连放在里面也不能幸免。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() 。 

  参考文档 
  1) jdom makes xml easy (http://www.servlets.com/speaking/jdom-javaone.pdf) 
  2) the java ™ architecture for xml binding user’s guide (http://java.sun.com/xml/jaxb/jaxb-docs.pdf) 
  3) web services made easier. the java tm apis and architectures for xml, a technical white paper (http://java.sun.com/xml/webservices.pdf) 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值