|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
C#是盗用了Java的源代码,仿照开发的,原因是Java是开源的啊,盗了也白盗,还有一点,开发C#语言的团队是就是开发Java语言的团队,是微软重金挖过去的啊dom|xml|技能JDOM的先容和与JAXB的对照
Java+XML=JDOM!
这就是JDOM计划者的方针。假如你已经利用过烦人的SAX或是DOM来处置XML,你就会晓得为何要有JDOM大概是JAXB。在JavaOne集会上JDOM的次要开创人JasonHunter有一篇出色的演讲先容了JDOM手艺,标题就是JDOMMakesXMLEasy。
在那篇文档里,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.0earlyaccess,其标准版本是0.21。绝对而言,JDOM更成熟一些。比方JAXB不撑持名字空间、不克不及向XML文档写进处置指令,偶然我们必要保存的换行符和首尾空格在JAXB中主动过滤失落了,就连放在内里也不克不及幸免。JDOM就没有这些限定。假如说以上的3点对照是JDOM和JAXB自己的特性所决意的,几近不成能改动,那末这里标明,JAXB还必要更多的事情。
取得并安装JDOM
在http://jdom.org能够下载JDOM的最新版本。以JDOMbeta8的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或DOMLevel2。因而招致了下面的毛病。
一个复杂的例子
JDOM的处置体例有些相似于DOM,但它次要是用SAX完成的,你不用忧虑处置速率和内存的成绩。别的,JDOM中几近没有接口,的类全体是实其实在的类,没有类工场类的。其最主要的一个包org.jdom中次要有以下类:
- CAttributeCCDATACCommentCDocTypeCDocumentCElementCEntityRefCNamespaceCProcessingInstructionCText
复制代码
数据输出要用到XML文档要经由过程org.jdom.input包,反过去必要org.jdom.output。如后面所说,关是看API文档就可以够利用。
我们的例子读进XML文件exampleA.xml,到场一条处置指令,修正第一本书的代价和作者,并增加一条属性,然后写进文件exampleB.xml:
- //exampleA.xml<?xmlversion="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.javaimportorg.jdom.*;importorg.jdom.output.*;importorg.jdom.input.*;importjava.io.*;publicclassTestJDOM{publicstaticvoidmain(Stringargs[])throwsException{SAXBuildersb=newSAXBuilder();//从文件机关一个Document,由于XML文件中已指定了编码,以是这里不用了Documentdoc=sb.build(newFileInputStream("exampleA.xml"));//到场一条处置指令ProcessingInstructionpi=newProcessingInstruction("xml-stylesheet","href="bookList.html.xsl"type="text/xsl"");doc.addContent(pi);Elementroot=doc.getRootElement();//失掉根元素java.util.Listbooks=root.getChildren();//失掉根元素一切子元素的汇合Elementbook=(Element)books.get(0);//失掉第一个book元素//为第一本书增加一条属性Attributea=newAttribute("hot","true");book.setAttribute(a);Elementauthor=book.getChild("author");//失掉指定的字元素author.setText("王五");//将作者改成王五//或Textt=newText("王五");book.addContent(t);Elementprice=book.getChild("price");//失掉指定的字元素//修正代价,对照忧郁的是我们必需本人转换数据范例,而这恰是JAXB的上风author.setText(Float.toString(50.0f));Stringindent="";booleannewLines=true;XMLOutputteroutp=newXMLOutputter(indent,newLines,"GBK");outp.output(doc,newFileOutputStream("exampleB.xml"));}};
复制代码
实行了局exampleB.xml:
- <?xmlversion="1.0"encoding="GBK"?><bookList><bookhot=”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-stylesheethref="bookList.html.xsl"type="text/xsl"?>
复制代码
在默许情形下,JDOM的Element类的getText()这类的办法不会过滤空缺字符,假如你必要过滤,用setTextTrim()。
大型的应用一般不会用这些框架(因为性能考虑);开发人员根据需要选择用一些框架,也可以不选用框架;不用框架并不代表要自己写框架;修改框架的可能性更小。 |
|