DOM4J解析XML.doc

上传人:rrsccc 文档编号:8837077 上传时间:2021-01-19 格式:DOC 页数:29 大小:50KB
返回 下载 相关 举报
DOM4J解析XML.doc_第1页
第1页 / 共29页
DOM4J解析XML.doc_第2页
第2页 / 共29页
DOM4J解析XML.doc_第3页
第3页 / 共29页
DOM4J解析XML.doc_第4页
第4页 / 共29页
DOM4J解析XML.doc_第5页
第5页 / 共29页
点击查看更多>>
资源描述

《DOM4J解析XML.doc》由会员分享,可在线阅读,更多相关《DOM4J解析XML.doc(29页珍藏版)》请在三一文库上搜索。

1、本文主要讨论了用dom4j解析XML的基础问题,包括建立XML文档,添加、修改、删除节点,以及格式化(美化)输出和中文问题。可作为dom4j的入门资料。 1下载与安装 dom4j是上的一个开源项目,主要用于对XML的解析。从2001年7月发布第一版以来,已陆续推出多个版本,目前最高版本为dom4j-1.6.1。 dom4j专门针对Java开发,使用起来非常简单、直观,在Java界,dom4j正迅速普及。 可以到http:/ dom4j1.6解压后有一个dom4j-1.6.1.jar文件,这就是应用时需要引入的类包,另外还有一个jaxen-1.1-beta-6.jarr文件,一般也需要引入,否则

2、执行时可能抛java.lang.NoClassDefFoundError:org/jaxen/JaxenException异常,其他的包可以选择用之。 2示例XML文档(holen.xml) 为了述说方便,先看一个XML文档,之后的操作均以此文档为基础。 holen.xml Dom4jTutorials LuceneStuding LuceneinAction OReilly 这是一个很简单的XML文档,场景是一个网上书店,有很多书,每本书有两个属性,一个是书名title,一个为是否展示show,最后还有一项是这些书的拥有者owner信息。 3建立一个XML文档 /* *建立一个XML文档,文

3、档名由输入属性决定 *paramfilename需建立的文件名 *return返回操作结果,0表失败,1表成功 */ publicintcreateXMLFile(Stringfilename) /*返回操作结果,0表失败,1表成功*/ intreturnValue=0; /*建立document对象*/ Documentdocument=DocumentHelper.createDocument(); /*建立XML文档的根books*/ ElementbooksElement=document.addElement(books); /*加入一行注释*/ booksElement.addCo

4、mment(Thisisatestfordom4j,holen,2004.9.11); /*加入第一个book节点*/ ElementbookElement=booksElement.addElement(book); /*加入show属性内容*/ bookElement.addAttribute(show,yes); /*加入title节点*/ ElementtitleElement=bookElement.addElement(title); /*为title设置内容*/ titleElement.setText(Dom4jTutorials); /*类似的完成后两个book*/ book

5、Element=booksElement.addElement(book); bookElement.addAttribute(show,yes); titleElement=bookElement.addElement(title); titleElement.setText(LuceneStuding); bookElement=booksElement.addElement(book); bookElement.addAttribute(show,no); titleElement=bookElement.addElement(title); titleElement.setText(L

6、uceneinAction); /*加入owner节点*/ ElementownerElement=booksElement.addElement(owner); ownerElement.setText(OReilly); try /*将document中的内容写入文件中*/ XMLWriterwriter=newXMLWriter(newFileWriter(newFile(filename); writer.write(document); writer.close(); /*执行成功,需返回1*/ returnValue=1; catch(Exceptionex) ex.printSt

7、ackTrace(); returnreturnValue; 说明: Documentdocument=DocumentHelper.createDocument(); 顶1 2007-08-23 20:05 回复 202.38.128.* 2楼 通过这句定义一个XML文档对象。 ElementbooksElement=document.addElement(books); 通过这句定义一个XML元素,这里添加的是根节点。 Element有几个重要的方法: laddComment:添加注释 laddAttribute:添加属性 laddElement:添加子元素 最后通过XMLWriter生成

8、物理文件,默认生成的XML文件排版格式比较乱,可以通过OutputFormat类的createCompactFormat()方法或createPrettyPrint()方法格式化输出,默认采用createCompactFormat()方法,显示比较紧凑,这点将在后面详细谈到。 生成后的holen.xml文件内容如下: Dom4jTutorialsLuceneStudingLuceneinActionOReilly 4修改XML文档 有三项修改任务,依次为: l如果book节点中show属性的内容为yes,则修改成no l把owner项内容改为Tshinghua,并添加date节点 l若titl

9、e内容为Dom4jTutorials,则删除该节点 /* *修改XML文件中内容,并另存为一个新文件 *重点掌握dom4j中如何添加节点,修改节点,删除节点 *paramfilename修改对象文件 *paramnewfilename修改后另存为该文件 *return返回操作结果,0表失败,1表成功 */ publicintModiXMLFile(Stringfilename,Stringnewfilename) intreturnValue=0; try SAXReadersaxReader=newSAXReader(); Documentdocument=saxReader.read(ne

10、wFile(filename); /*修改内容之一:如果book节点中show属性的内容为yes,则修改成no*/ /*先用xpath查找对象*/ Listlist=document.selectNodes(/books/book/show); Iteratoriter=list.iterator(); while(iter.hasNext() Attributeattribute=(Attribute)iter.next(); if(attribute.getValue().equals(yes) attribute.setValue(no); /* *修改内容之二:把owner项内容改为T

11、shinghua *并在owner节点中加入date节点,date节点的内容为2004-09-11,还为date节点添加一个属性type */ list=document.selectNodes(/books/owner); iter=list.iterator(); if(iter.hasNext() ElementownerElement=(Element)iter.next(); ownerElement.setText(Tshinghua); ElementdateElement=ownerElement.addElement(date); dateElement.setText(20

12、04-09-11); dateElement.addAttribute(type,Gregoriancalendar); /*修改内容之三:若title内容为Dom4jTutorials,则删除该节点*/ list=document.selectNodes(/books/book); iter=list.iterator(); while(iter.hasNext() ElementbookElement=(Element)iter.next(); Iteratoriterator=bookElement.elementIterator(title); while(iterator.hasNe

13、xt() ElementtitleElement=(Element)iterator.next(); if(titleElement.getText().equals(Dom4jTutorials) bookElement.remove(titleElement); try /*将document中的内容写入文件中*/ XMLWriterwriter=newXMLWriter(newFileWriter(newFile(newfilename); writer.write(document); writer.close(); /*执行成功,需返回1*/ returnValue=1; catch

14、(Exceptionex) ex.printStackTrace(); catch(Exceptionex) 2007-08-23 20:05 回复 202.38.128.* 3楼 ex.printStackTrace(); returnreturnValue; 说明: Listlist=document.selectNodes(/books/book/show); list=document.selectNodes(/books/book); 上述代码通过xpath查找到相应内容。 通过setValue()、setText()修改节点内容。 通过remove()删除节点或属性。 5格式化输出

15、和指定编码 默认的输出方式为紧凑方式,默认编码为UTF-8,但对于我们的应用而言,一般都要用到中文,并且希望显示时按自动缩进的方式的显示,这就需用到OutputFormat类。 /* *格式化XML文档,并解决中文问题 *paramfilename *return */ publicintformatXMLFile(Stringfilename) intreturnValue=0; try SAXReadersaxReader=newSAXReader(); Documentdocument=saxReader.read(newFile(filename); XMLWriterwriter=n

16、ull; /*格式化输出,类型IE浏览一样*/ OutputFormatformat=OutputFormat.createPrettyPrint(); /*指定XML编码*/ format.setEncoding(GBK); writer=newXMLWriter(newFileWriter(newFile(filename),format); writer.write(document); writer.close(); /*执行成功,需返回1*/ returnValue=1; catch(Exceptionex) ex.printStackTrace(); returnreturnVal

17、ue; 说明: OutputFormatformat=OutputFormat.createPrettyPrint(); 这句指定了格式化的方式为缩进式,则非紧凑式。 format.setEncoding(GBK); 指定编码为GBK。 XMLWriterwriter=newXMLWriter(newFileWriter(newFile(filename),format); 这与前面两个方法相比,多加了一个OutputFormat对象,用于指定显示和编码方式。 6完整的类代码 前面提出的方法都是零散的,下面给出完整类代码。 Dom4jDemo.java packagecom.holen.dom

18、4j; importjava.io.File; importjava.io.FileWriter; importjava.util.Iterator; importjava.util.List; importorg.dom4j.Attribute; importorg.dom4j.Document; importorg.dom4j.DocumentHelper; importorg.dom4j.Element; importorg.dom4j.io.OutputFormat; importorg.dom4j.io.SAXReader; importorg.dom4j.io.XMLWriter;

19、 /* *authorHolenChen */ publicclassDom4jDemo publicDom4jDemo() publicintcreateXMLFile(Stringfilename) publicintModiXMLFile(Stringfilename,Stringnewfilename) publicintformatXMLFile(Stringfilename) publicstaticvoidmain(Stringargs) Dom4jDemotemp=newDom4jDemo(); System.out.println(temp.createXMLFile(d:/

20、holen.xml);System.out.println(temp.ModiXMLFile(d:/holen.xml,d:/holen2.xml); System.out.println(temp.formatXMLFile(d:/holen2.xml); 说明: main()方法中依次调用三个方法,第一个方法用于生成holen.xml,第二个方法用于修改holen.xml,并且修改后的内容另存为holen2.xml,第三个方法将holen2.xml格式化缩进式输出,并指定编码方式为GBK。 重新格式化后holen2.xml文件显示如下: 7总结 总的来说,dom4j的使用是很简单的,而且与Java结合紧密,功能强大。 作者简介 陈光J2EE项目经理,熟悉EJB、XML,致力于AapcheJakarta、SourceForge等开源项目的应用与推广,目前主要从事电子政务解决方案的组件化和产品化工作,可通过与作者联系。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1