您好,欢迎访问三七文档
当前位置:首页 > 建筑/环境 > 电气安装工程 > dom4japi详解
1、DOM4J简介DOM4J是dom4j.org出品的一个开源XML解析包。DOM4J应用于Java平台,采用了Java集合框架并完全支持DOM,SAX和JAXP。DOM4J使用起来非常简单。只要你了解基本的XML-DOM模型,就能使用。Dom:把整个文档作为一个对象。DOM4J最大的特色是使用大量的接口。它的主要接口都在org.dom4j里面定义:Attribute定义了XML的属性。Branch指能够包含子节点的节点。如XML元素(Element)和文档(Docuemnts)定义了一个公共的行为CDATA定义了XMLCDATA区域CharacterData是一个标识接口,标识基于字符的节点。如CDATA,Comment,Text.Comment定义了XML注释的行为Document定义了XML文档DocumentType定义XMLDOCTYPE声明Element定义XML元素ElementHandler定义了Element对象的处理器ElementPath被ElementHandler使用,用于取得当前正在处理的路径层次信息Entity定义XMLentityNode为dom4j中所有的XML节点定义了多态行为NodeFilter定义了在dom4j节点中产生的一个滤镜或谓词的行为(predicate)ProcessingInstruction定义XML处理指令Text定义XML文本节点Visitor用于实现Visitor模式XPath在分析一个字符串后会提供一个XPath表达式接口之间的继承关系如下:interfacejava.lang.Cloneableinterfaceorg.dom4j.Nodeinterfaceorg.dom4j.Attributeinterfaceorg.dom4j.Branchinterfaceorg.dom4j.Documentinterfaceorg.dom4j.Elementinterfaceorg.dom4j.CharacterDatainterfaceorg.dom4j.CDATAinterfaceorg.dom4j.Commentinterfaceorg.dom4j.Textinterfaceorg.dom4j.DocumentTypeinterfaceorg.dom4j.Entityinterfaceorg.dom4j.ProcessingInstruction2、XML文档操作12.1、读取XML文档:读写XML文档主要依赖于org.dom4j.io包,有DOMReader和SAXReader两种方式。因为利用了相同的接口,它们的调用方式是一样的。publicstaticDocumentload(Stringfilename){Documentdocument=null;try{SAXReadersaxReader=newSAXReader();document=saxReader.read(newFile(filename));//读取XML文件,获得document对象}catch(Exceptionex){ex.printStackTrace();}returndocument;}或publicstaticDocumentload(URLurl){Documentdocument=null;try{SAXReadersaxReader=newSAXReader();document=saxReader.read(url);//读取XML文件,获得document对象}catch(Exceptionex){ex.printStackTrace();}returndocument;}//读取指定的xml文件之后返回一个Document对象,这个对象代表了整个XML文档,用于各种Dom运算。执照XML文件头所定义的编码来转换。2.2、获取根节点根节点是xml分析的开始,任何xml分析工作都需要从根开始Xmlxml=newXml();Documentdom=xml.load(path+/+file);Elementroot=dom.getRootElement();2.3、.新增一个节点以及其下的子节点与数据ElementmenuElement=root.addElement(menu);ElementengNameElement=menuElement.addElement(engName);engNameElement.setText(catNameEn);ElementchiNameElement=menuElement.addElement(chiName);chiNameElement.setText(catName);2.4、写入XML文件注意文件操作的包装类是乱码的根源publicstaticbooleandoc2XmlFile(Documentdocument,Stringfilename){booleanflag=true;try{XMLWriterwriter=newXMLWriter(newOutputStreamWriter(newFileOutputStream(filename),UTF-8));writer.write(document);writer.close();}catch(Exceptionex){flag=false;ex.printStackTrace();}System.out.println(flag);returnflag;}Dom4j通过XMLWriter将Document对象表示的XML树写入指定的文件,并使用OutputFormat格式对象指定写入的风格和编码方法。调用OutputFormat.createPrettyPrint()方法可以获得一个默认的prettyprint风格的格式对象。对OutputFormat对象调用setEncoding()方法可以指定XML文件的编码方法。publicvoidwriteTo(OutputStreamout,Stringencoding)throwsUnsupportedEncodingException,IOException{OutputFormatformat=OutputFormat.createPrettyPrint();format.setEncoding(gb2312);XMLWriterwriter=newXMLWriter(System.out,format);writer.write(doc);writer.flush();return;}2.5、遍历xml节点对Document对象调用getRootElement()方法可以返回代表根节点的Element对象。拥有了一个Element对象后,可以对该对象调用elementIterator()方法获得它的子节点的Element对象们的一个迭代器。使用(Element)iterator.next()方法遍历一个iterator并把每个取出的元素转化为Element类型。publicbooleanisOnly(StringcatNameEn,HttpServletRequestrequest,Stringxml){booleanflag=true;Stringpath=request.getRealPath();Documentdoc=load(path+/+xml);Elementroot=doc.getRootElement();for(Iteratori=root.elementIterator();i.hasNext();){Elementel=(Element)i.next();if(catNameEn.equals(el.elementTextTrim(engName))){flag=false;break;}}returnflag;}2.6、创建xml文件publicstaticvoidmain(Stringargs[]){StringfileName=c:/text.xml;Documentdocument=DocumentHelper.createDocument();//建立document对象,用来操作xml文件ElementbooksElement=document.addElement(books);//建立根节点booksElement.addComment(Thisisatestfordom4j);//加入一行注释ElementbookElement=booksElement.addElement(book);//添加一个book节点bookElement.addAttribute(show,yes);//添加属性内容ElementtitleElement=bookElement.addElement(title);//添加文本节点titleElement.setText(ajaxinaction);//添加文本内容try{XMLWriterwriter=newXMLWriter(newFileWriter(newFile(fileName)));writer.write(document);writer.close();}catch(Exceptione){e.printStackTrace();}}2.7、修改节点属性publicstaticvoidmodifyXMLFile(){StringoldStr=c:/text.xml;StringnewStr=c:/text1.xml;Documentdocument=null;//修改节点的属性try{SAXReadersaxReader=newSAXReader();//用来读取xml文档document=saxReader.read(newFile(oldStr));//读取xml文档Listlist=document.selectNodes(/books/book/@show);//用xpath查找节点book的属性Iteratoriter=list.iterator();while(iter.hasNext()){Attributeattribute=(Attribute)iter.next();if(attribute.getValue().equals(yes))attribute.setValue(no);}}catch(Exceptione){e.printStackTrace();}//修改节点的内容try{SAXReadersaxReader=newSAXReader();//用来读取xml文档document=saxReader.read(newFile(oldStr));//读取xml文档Listlist=document.selectNodes(/books/book/title);//用xpath查找节点book的内容Iteratoriter=list.iterator();while(iter.hasNext()){Elementelement=(Element)iter.next();element.setText(xxx);//设置相应的内容}}catch(Exceptione){e.printStackTrace();}try{XMLWriterwriter=newXMLWriter(newFileWriter(newFile(newStr)));writer.write(document);writer.close();}catch(Exceptionex){ex.printStackTrace();}}2.8、删除节点publicstaticvoidremoveNode(){StringoldStr=c:/text.xml;StringnewStr=c:/text1.xml;Documentdocument=null;try{SAXReadersaxReader=newSAXReade
本文标题:dom4japi详解
链接地址:https://www.777doc.com/doc-2910200 .html