下载
加入VIP
  • 专属下载特权
  • 现金文档折扣购买
  • VIP免费专区
  • 千万文档免费下载

上传资料

关闭

关闭

关闭

封号提示

内容

首页 dom4j-详解

dom4j-详解.doc

dom4j-详解

Renata洁莹
2019-06-16 0人阅读 举报 0 0 暂无简介

简介:本文档为《dom4j-详解doc》,可适用于IT/计算机领域

、domj简介domj是domjorg出品的一个开源XML解析包。DOMJ应用于Java平台采用了Java集合框架并完全支持DOMSAX和JAXP。DOMJ使用起来非常简单。只要你了解基本的XMLDOM模型就能使用。Dom:把整个文档作为一个对象。DOMJ最大的特色是使用大量的接口。它的主要接口都在orgdomj里面定义:attribute定义了XML的属性。Branch指能够包含子节点的节点。如XML元素(Element)和文档(Docuemnts)定义了一个公共的行为CDATA定义了XMLCDATA区域CharacterData是一个标识接口标识基于字符的节点。如CDATAComment,TextComment定义了XML注释的行为Document定义了XML文档DocumentType定义XMLDOCTYPE声明Element定义XML元素ElementHandler定义了Element对象的处理器ElementPath被ElementHandler使用用于取得当前正在处理的路径层次信息Entity定义XMLentityNode为domj中所有的XML节点定义了多态行为NodeFilter定义了在domj节点中产生的一个滤镜或谓词的行为(predicate)ProcessingInstruction定义XML处理指令Text定义XML文本节点Visitor用于实现Visitor模式XPath在分析一个字符串后会提供一个XPath表达式    接口之间的继承关系如下:interfacejavalangCloneableinterfaceorgdomjNodeinterfaceorgdomjattributeinterfaceorgdomjBranchinterfaceorgdomjDocumentinterfaceorgdomjElementinterfaceorgdomjCharacterDatainterfaceorgdomjCDATAinterfaceorgdomjCommentinterfaceorgdomjTextinterfaceorgdomjDocumentTypeinterfaceorgdomjEntityinterfaceorgdomjProcessingInstruction、XML文档操作、读取XML文档:读写XML文档主要依赖于orgdomjio包有DOMReader和SAXReader两种方式。因为利用了相同的接口它们的调用方式是一样的。publicstaticDocumentload(StringFilename){Documentdocument=try{SAXReadersaxReader=newSAXReader()document=saxReaderread(newFile(filename)) 读取XML文件,获得document对象}catch(Exceptionex){exprintStackTrace()}returndocument} 或publicstaticDocumentload(URLurl){Documentdocument=try{SAXReadersaxReader=newSAXReader()document=saxReaderread(url) 读取XML文件,获得document对象}catch(Exceptionex){exprintStackTrace()}returndocument}读取指定的xml文件之后返回一个Document对象这个对象代表了整个XML文档用于各种Dom运算。执照XML文件头所定义的编码来转换。、获取根节点根节点是xml分析的开始任何xml分析工作都需要从根开始Xmlxml=newXml()Documentdom=xmlload(path""File)Elementroot=domgetRootElement()、新增一个节点以及其下的子节点与数据ElementmenuElement=rootaddElement("menu")ElementengnameElement=menuElementaddElement("engname")engNameElementsetText(catNameEn)ElementchiNameElement=menuElementaddElement("chiName")chiNameElementsetText(catName)、写入XML文件注意文件操作的包装类是乱码的根源publicstaticbooleandocXmlFile(Documentdocument,Stringfilename){booleanflag=truetry{XMLWriterWriter=newXMLWriter(newOutputStreamWriter(newFileOutputStream(filename),""))Writerwrite(document)Writerclose()}catch(Exceptionex){flag=falseexprintStackTrace()}Systemoutprintln(flag)returnflag}domj通过XMLWriter将Document对象表示的XML树写入指定的文件并使用Outpormat格式对象指定写入的风格和编码方法。调用OutpormatcreatePrettyPrint()方法可以获得一个默认的prettyprint风格的格式对象。对Outpormat对象调用setEncoding()方法可以指定XML文件的编码方法。publicvoidwriteTo(OutputStreamout,Stringencoding)throwsUnsupportedEncodingException,IOException{Outpormatformat=OutpormatcreatePrettyPrint()formatsetEncoding("gb")XMLWriterwriter=newXMLWriter(Systemout,format)writerwrite(doc)writerflush()return}、遍历xml节点对Document对象调用getRootElement()方法可以返回代表根节点的Element对象。拥有了一个Element对象后可以对该对象调用elementIterator()方法获得它的子节点的Element对象们的一个迭代器。使用(Element)iteratornext()方法遍历一个iterator并把每个取出的元素转化为Element类型。publicbooleanisOnly(StringcatnameEn,HttpServletRequestrequest,Stringxml){booleanflag=trueStringpath=requestgetRealPath("")Documentdoc=load(path""xml)Elementroot=docgetRootElement()for(Iteratori=rootelementIterator()ihasNext()){Elementel=(Element)inext()if(catnameEnequals(elelementTextTrim("engName"))){flag=falsebreak}}returnflag}、创建xml文件publicstaticvoidmain(Stringargs){StringFileName="c:textxml"Documentdocument=DocumentHelpercreateDocument()建立document对象用来操作xml文件ElementbooksElement=documentaddElement("books")建立根节点booksElementaddComment("Thisisatestfordomj")加入一行注释ElementbookElement=booksElementaddElement("book")添加一个book节点bookElementaddattribute("show","yes")添加属性内容ElementtitleElement=bookElementaddElement("title")添加文本节点titleElementsetText("ajaxinaction")添加文本内容try{XMLWriterwriter=newXMLWriter(newFileWriter(newFile(filename)))  writerwrite(document)writerclose()}catch(Exceptione){eprintStackTrace()}}、修改节点属性publicstaticvoidmodifyXMLFile(){StringoldStr="c:textxml"StringnewStr="c:textxml"Documentdocument=修改节点的属性try{SAXReadersaxReader=newSAXReader()用来读取xml文档document=saxReaderread(newFile(oldStr))读取xml文档Listlist=documentselectNodes("booksbookshow")用xpath查找节点book的属性Iteratoriter=listiterator()while(iterhasNext()){attributeattribute=(Attribute)iternext()if(attributegetValue()equals("yes"))attributesetValue("no")}}catch(Exceptione){eprintStackTrace()}修改节点的内容try{SAXReadersaxReader=newSAXReader()用来读取xml文档document=saxReaderread(newFile(oldStr))读取xml文档Listlist=documentselectNodes("booksbooktitle")用xpath查找节点book的内容Iteratoriter=listiterator()while(iterhasNext()){Elementelement=(Element)iternext()elementsetText("xxx")设置相应的内容}}catch(Exceptione){eprintStackTrace()}try{XMLWriterwriter=newXMLWriter(newFileWriter(newFile(newStr)))writerwrite(document)writerclose()}catch(Exceptionex){exprintStackTrace()}}、删除节点publicstaticvoidremoveNode(){StringoldStr="c:textxml"StringnewStr="c:textxml"Documentdocument=try{SAXReadersaxReader=newSAXReader()用来读取xml文档document=saxReaderread(newFile(oldStr))读取xml文档Listlist=documentselectNodes("booksbook")用xpath查找对象Iteratoriter=listiterator()while(iterhasNext()){ElementbookElement=(Element)iternext()创建迭代器用来查找要删除的节点,迭代器相当于指针指向book下所有的title节点Iteratoriterator=bookElementelementIterator("title")while(iteratorhasNext()){ElementtitleElement=(Element)iteratornext()if(titleElementgetText()equals("ajaxinaction")){bookElementremove(titleElement)}}}}catch(Exceptione){eprintStackTrace()}try{XMLWriterwriter=newXMLWriter(newFileWriter(newFile(newStr)))writerwrite(document)writerclose()}catch(Exceptionex){exprintStackTrace()}}、XML文档操作、Document对象相关    、读取XML文件,获得document对象   SAXReaderreader=newSAXReader() Document document=readerread(newFile("inputxml"))   、解析XML形式的文本,得到document对象   Stringtext="<members><members>"   Documentdocument=DocumentHelperparseText(text)   、主动创建document对象   Documentdocument=DocumentHelpercreateDocument()   Elementroot=documentaddElement("members")创建根节点   、节点相关    、获取文档的根节点   ElementrootElm=documentgetRootElement()   、取得某节点的单个子节点   ElementmemberElm=rootelement("member")"member"是节点名   取得节点的文字   Stringtext=memberElmgetText()  Stringtext=rootelementText("name")这个是取得根节点下的name字节点的文字   取得某节点下指定名称的所有节点并进行遍历   Listnodes=rootElmelements("member")   for(Iteratorit=nodesiterator()ithasNext()){   Elementelm=(Element)itnext()   dosomething   }   对某节点下的所有子节点进行遍历   for(Iteratorit=rootelementIterator()ithasNext()){   Elementelement=(Element)itnext()   dosomething   }   在某节点下添加子节点   ElementageElm=newMemberElmaddElement("age")   设置节点文字   ageElmsetText("")   删除某节点   parentElmremove(childElm)  childElm是待删除的节点,parentElm是其父节点   添加一个CDATA节点   ElementcontentElm=infoElmaddElement("content")   contentElmaddCDATA(diarygetContent())   、属性相关   取得节点的指定的属性   Elementroot=documentgetRootElement()     attributeattribute=rootattribute("size")  属性名name   取得属性的文字   Stringtext=attributegetText()  Stringtext=rootelement("name")attributeValue("firstname")这个是取得根节点下name字节点的firstname属性的值   遍历某节点的所有属性   Elementroot=documentgetRootElement()for(Iteratorit=rootattributeIterator()ithasNext()){

用户评价(0)

关闭

新课改视野下建构高中语文教学实验成果报告(32KB)

抱歉,积分不足下载失败,请稍后再试!

提示

试读已结束,如需要继续阅读或者下载,敬请购买!

文档小程序码

使用微信“扫一扫”扫码寻找文档

1

打开微信

2

扫描小程序码

3

发布寻找信息

4

等待寻找结果

我知道了
评分:

/17

dom4j-详解

VIP

在线
客服

免费
邮箱

爱问共享资料服务号

扫描关注领取更多福利