1. 首页
  2. 编程语言
  3. Java
  4. dom4j_API_示例讲解.pdf

dom4j_API_示例讲解.pdf

上传者: 2018-12-25 17:26:31上传 PDF文件 1.71MB 热度 28次
dom4j_API_示例讲解.pdf dom4j_API_示例讲解.pdf dom4j_API_示例讲解.pdf dom4j_API_示例讲解.pdf dom4j_API_示例讲解.pdf dom4j_API_示例讲解.pdf dom4j_API_示例讲解.pdf dom4j_API_示例讲解.pdf dom4j_API_示例讲解.pdf dom4j_API_示例讲解.pdf dom4j_API_示例讲解.pdf dom4j_API_示例讲解.pdf根据本人自己的经验,读取的字符编码是按照XML文件头定义的编码来转换。如果遇到乱码问题,注意要把各处的编码名称保持一致即可。2取得Root节点读取后的第二步,就是得到Root节点。熟悉ML的人都知道,一切ML分析都是从Root元素开始的。public Element getRootDlement( document doc)Ireturn doc. getRootElement(3.遍历ML树DOM4J提供至少3和遍历节点的方法1)枚举! Iterator)/枚举所有子节点for Iterator i= root. elementIteratoro: i hasNext(:)[Element element=(Element)i next O//dthing//枚举名称为foc的节点Iteratoror(foo): i. hasNcxt(:Elenent foo =(Element)i, next/, do something/枚举属忾for Iterator i root, attributcltcrator(; i hasNcxt:)[Attribute attribute = (Attribute)i next O// do some递归递归也可以采用 Iterator作为枚举手段,但文档中提供了另外的做法public void treeWalko(treeWalk(getRootElement ()public void treeWalk (Element elementfor (int i=0, size= element. nodeCount(:i< size: i++iNode node element node (i)(node instanceof Element)!treeWalk((Element)node?i else[// do something3 Visitor模式最令人以奋的是0MA4J对 Visitor的支持,这样可以大大缩减代码量,并且清楚易懂。了解设计模式的人都知道, Visitor是GOF设计棋式之。其主要原理就是两种类互相保有对方的引用,并且种作为Ⅴ isi tor去访问许多 imitable。我们来看DM4』中的Ⅴ asi tor模式(快央速文档中没有提供)只需要自定一个类实现Ⅴ ls1 tor接口即可。public class MyVisitor extends visitorSupportpublic void visit(Element element)[System. out. println(element. get)public void visit (Attribute attr)(Systell. ouL prinTln(altr. ge LName()调用:root. accept( new My visitor()Visitor接口提供多种 Visit(的重载,根据XML不同的对象,将采用不同的方式来访问。上面是给出的 Element和 Attribute的简单实现,一般比铰常用的就是这两个。 Visitorsuppor't是DoM!J提供的默认适配器, visitor接口的 Default Adaptor模式,这个模式给出了各和 visit(*)的空实现,以便简化代码。注意,这个 Visitor是自动遍历所有子节点的。如果是root. accept( My Visitor),将遍历了节点。我第一次用的时候,认为是需要自己遍历,便在递归中调用 Visitor,结果可想而知1. XPath支持DOM4J对 XPath有良好的支持,如访问一个节点,可直接用 XPath选择public void bar(Document document)List list= documcnt. sclcctNodcs(//foo/barNode node document select SingleNode(//foo bar/authorString name= node valueof( @name例如,如果你想查找ⅫHTML文档中所有的超接,下面的代码可以实现:public void find inks(Document document) throws DocumentException iList list document selectNodes(//a/hreffor (Iteratlist iterator (: iter. hasNextO:)iAttribute attribute=(Attribute) itor nextoString url attribute getvalue()5.宁符串与ⅫML的转换有时候经常要用刭字符串转换为XML或反之,/XⅦL转字符串DoC ument documenTString text= document. asXML O/宇符串转XString text =JamesDoci ment. document.=Document. Helper perse Text(text6用XSLT转换XMpublic document sty leDocument iDocument documentString stylesheetthrows Exception// load the trans former using JAXPTrans formerFactory factory- TransformerFactory newInstance(Transformer transformer= factory. newTransformer(new StreamSource( stylesheet);/A row lets style the given documentDocument Source source= new Document Source( documentDocument Result result new Document resulttrans former, transform( source, result// return the transformed documentDocument transformedDoc= result. getDocument Orcturn transformeddoc7.创建XM一般创建ⅪML是写文件前的工作,这就像 StringBuffer一样容易public Document createDocument((Document document=Document Helper. createDccument(Element root= document. addElement (root)Elenent authorlrootaddElement (author)addAttribute(name, James)nddAttributc(location, UK)addText(James Strachan;Element authorrootaddElement (author)addAttributc (namc. Bob,addAttribute(location, US)addText(Bob McWhirter)return document8.文件输出个简单的输出方法是将一个 Document或任何的Node通过wite方法输出FileWriter out= new FileWriter( foU xl1document. write(out)如果你想改变输岀的格式,比如美化输岀或缩减格式,可以用 XMLWriter类public void write (document document) throws IOExcepticn I//指定文亻XMLWriter writer= new XML Writer(new FileWriter( output xmlwriter. write documentwriter. close美化格式OutputFormat format= OutputFormat. createPret ty Print(writer= new XML. Writer( System. out, formatwriter. write( document 3/缩诚格式Tornal =OuLpulFurmal creaTe Compac LFurlaLO)writer= new XML Writer( System. out, formatwriter. write( document如何,DM4J够简单吧,当然,还有一些复杂的应用没有提到,如 Elementhandler等如果你动心了,那就一起来用DOM4J使用介绍2文上要讨论了用dom4j解析XM的基础问题,包括建立MM文档,添加、修改、删除节点,以及格式化(美化)输出和屮文问趣。可作为dom4j的入门资料。1.下载与安装dom4j是 sourccforgc.net上的一个开源项,主要用于对XML的解析。从2001年7月发布第一版以米,已陆续推出多个版本,目前最高版本为1.5。dom4专门针对Iava开发,使用起来非常简单、直观,在Java界,dcm4j正迅速晋及。可以到http://sourceforge.net/prejects/dom4j下载其最新版。dun4j1.5的完整版大约13M,是一个名为doun4j-1.5.zip的压缩包,解压后有一个dom4j-1.5.iar文件,这就是应用时需要引入的类包,另外还有一个 Waxen-1.1-beta-4.jar文件,一般也需要引入,否则执行时可能抛java.1ang. Noc lass Deffaunderror:org/ . axer/JaxerExceplio异常,其他的包可以选择用之。2.示例ⅪML文档( holen.xml)为了述说方便,先看一个ⅫML文档,之后的操作均以此文档为基础。holen. xml? xn version="1.0″ encoding="UTF-8″Book show= ves>4j Tutorials/ title>Title>Lucene Studing/title>C/book< Lucene in Action(/book>Kowner >o Reilly/owner>这是一个很简单的ML文档,场景是一个网上书店,有很多书,每木书有两个属性,一个是书名,一个为是否展示[show],最后还有一项是这些书的拥有者[oner]信息3.建立一个XM文档*建立一个XM文档,文档名由输入属性决定米@ aram filename需建立的文件名@retu返回操作结果,0表失败,1表成功public int createXMLFile(String filename)[返回操作结果,0表失败,1表成功*int returnvalue =o/种米建立 document对象*Document document=DocumentHelper createDocument O/*建立XM文档的根hoks*Elenent booksElement doc unent addElement("booss")/*加入一行注释*booksElement. addComment( This is a test for dom4j, holen, 2004.9. 11)/**加入第一个bcok节点*Element bookFlement booksElement addFlement baok")/种加入sow属内容*bookElement. addAttribute( show","yes")/**加入 title节点*Elenent titleelement bookElement addElement i title为 title设置内容*titleElement. setText(Dom4j Tutorials",/*类似的完成后两个book*/bookElement booksElement addElement(book ")bookElement. addAttribute( show", yes")titleElement= bookElement addElement( title"titleElement. setText (Lucene Studing")bookElement-boaksElement addElement("bookbookElement. addAttribute( show", no)titleElement= baokElement addElement(titletitleLlement, setText(Lucene in Action)/米*加入ner节点*Element ownerElement booksElement EddElement(owner")ownerElement set Text(O Reilly")try i/*将 document中的内容写入文件中米/XMLWriter writer= new XMLWriter(new FileWriter(new File(filename)))writer. write(dncument.iter. close o/米米执行成功,需返回1米/returnvalue= 1J catch(Exception ex)ex. printstackTraceorcturn rcturnvaluc说明Documentdocument- DocumentHclper crcatcDccument O通过这句定义一个ML文档对象。Elenent booksElenent document, addElement(booss通过这句定义一个ML元素,这里添加的是节点。Element有几个重要的方法:1 addComment:添加注程1 addAttribute:添加属性1 addElement:添加」元素最后通过 XMLWritcr生成物理文件,默认生成的MML文件排版格式比较乱,可以通过0utputFormat类的 createCompact Format(方法或 createPrettyPrint()方法格式化输出,默认采用 create CompactFormat O方法,显示比较紧凑,这点将在后面详纽谈到。生成后的 holen.xm1文件内容如下:bock shcw"yos">title>Dom4j Tutorials(book show= yes >/book>Lucene in Action/title>owner >0 Reilly4.修改ⅪML文档有三项修改任务,依次为1如果boo节点中show属性的内容为yes,则修改成nc1把 owner项内容改为 Tshinghua,并添加date节点1若 title内容为Dom4 j Tutorials:则删狳该节点*修改ⅫML文件屮内容,并另存为一个新文件*重点掌握dom4中如何添加节点,修改节点,除节点@ param filename修改对象文件@ param newfilename修改后另存为该文件* Return返回操作结果,0表失败。1表成功public int Modi XMLFile(String filename, String newfilename)[int returnValue =0:SAXReader sax Reader new SAXReaderODocumeNt document= saxReader read ( new File(filename)/米修改内容之一:如果book节点中shox属性的内容为yes,则修改成n米//米*先用 xpath查找对象米List list- document selectNodes("/books/ book/@show")Iterator iter= list iterator(while(iter has Nexto)Attribute attribute(Attribute)iti=(attribute getValue( equals("yes))attribute setValue("no*修改内容之二:把ower项内容改为 Tshinghua*并在 owner节点中加入date节点,date节点的内容为2004-0911,还为date节点添加一个属性typclist document selectNodes("/'books/owner")list. iterator (i=(iter hasNext()[Element ownerElenent=(Element)iter. next)ownerElement set Text(Tshinghua")Elenent dateElement ownerElement addElement( date")datcElcmcnt. sctText( 2001-09-11dateElement. addAttribute( type", Gregorian calendar)/种修改内谷之一:若tie内容为nom4 j Tutorials,则删除该节点st document selectNodes"/books /book)iter= list iterator (while(iter. hasNexto)iElenent bookElemenl=(Element)iLer. nexL(Iterator iterator bookElement elementIterator("title"while(iterator. hasNexto)(Elenent titleElement=(Element)iterator. next)i=(tit.. get Text (. equals("Dom4j Tutorials ))bookElenment. r'emove(titleElenent)/将 document中的内容写入文件中*/XMLWriter writer= new XML Writer(new FileWriter(new File(newfilename))writer. write(document)writer. close/*执行成功,需返回1*reluruValut=lJ catch(Exception ex)tex. printStackTraceo)I catch(Exception ex)(ex. printstackTraceOreturn returnvalue说明:List list document, selectNodes("/books/book/'show")list document select Nodes("/books/book")上述代码通过 xpath查找到相应内容通过 setvalue0、 setTexto修改节点内容。通过 rcmovc(删除节点或属性。5.格式化输出和指定编码默认的输出方式为紧凑方式,默认编码为UTF-8,但对于我们的应用而言,一般都要用到中文,并且希望显示时按自动缩进的方式的显示,这就需用到 OutputFormat类*格式化ⅪM.文档.并解决中文问题米@ param filename* returnpublic int formatXMLFile (string filename)(int returnvalue =0:SAXReader saxReader= new SAXReadero)Document document saxReader read (new File(filename))XMLWriter writer= null/*格式化输出,类型IE浏览一样OutputFormat format=Output Format. createPrettyPrint(/指定Ⅻ编码*format set Encoding(GBK")writer= new XML Writer(new FileWriter(new File'f'ilename)), format)
下载地址
用户评论
码姐姐匿名网友 2018-12-25 17:26:31

只有几个简单的小例子,入门还可以

码姐姐匿名网友 2018-12-25 17:26:31

还不错,里面有我需要的东西