`
persistC
  • 浏览: 71436 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

dom4j初学入门

阅读更多
DOM4j是一个易用的,开源的JAVA操作XML的API,写过一篇4种XML操作API的比较,DOM4j是性能和易用行最佳的。因此做一个小教程,供初学者学习。

         学习DOM4j首先就先来了解下它主要的包

                DOM4j所有的接口都在org.dom4j这个包里定义着

               org.dom4j.Attribute : Attribute接口定义了XML文件的属性

               org.dom4j.Branch : Branch为能够包含子节点的节点如XML元素和文档定义了一个公共行为

                org.dom4j.CDATA : CDATA定义了XML CDATA区域

                org.dom4j.CharacterData: CharacterData是一个标识接口,标识基于字符的节点。

               org.dom4j.Comment : Comment定义了XML注释的行为

                org.dom4j.Document : Docement接口定义了XML文档

               org.dom4j.Element   : Element定义了XML元素

               org.dom4j.ElementHandler: ElementHandler定义了Element对象的处理器

               org.dom4j.ElementPath : 被ElementHandler使用,用于取得当前正在处理的路径层次信息

                org.dom4j.Entity     : Entity定义XML entity

                org.dom4j.Node :   Node为所有的dom4j中XML节点定义了多态行为

               org.dom4j.NodeFilter : NodeFilter定义了在dom4j节点中产生的一个滤镜或谓词的行为

                org.dom4j.ProcessingInstruction : ProcessingInstruction定义XML处理指令

                org.dom4j.Text   : Test定义了XML文本节点

               org.dom4j.Visitor : Visitor用于实现Visitor模式

               org.dom4j.XPath : XPath在分析一个字符串后会提供一个XPath表达式

          下面说下主要的实用方法

          1: 读取并解析XML文档:

                读写XML文档主要依赖于org.dom4j.io包,提供了DOMReader和SAXReader两类不同方式,调用方式一样。

            // 从文件读取XML,输入文件名,返回XML文档

    public Document read(String fileName) throws MalformedURLException, DocumentException {                      SAXReader reader = new SAXReader();          
Document document = reader.read(new File(fileName));             return document;    

2:取得ROOT节点        
如果要读取一个XML文件,最重要的就是要读取ROOT节点了,一切分析XML都是从ROOT节点开始。       
public Element getRootElement(Document doc){          
  return doc.getRootElement(); 
  } 
3:遍历XML树,这里有二种方法     
(1): 枚举          
// 枚举所有子节点    
for ( Iterator i = root.elementIterator(); i.hasNext(); ) {       Element element = (Element) i.next();     
// do something   
}  
// 枚举名称为foo的节点   
for ( Iterator i = root.elementIterator(foo); i.hasNext();) {       Element foo = (Element) i.next();     
// do something   
}   

// 枚举属性   
for ( Iterator i = root.attributeIterator(); i.hasNext(); ) {       Attribute attribute = (Attribute) i.next();      
// do something  
}
(2) : 递归    
public void treeWalk() {       
treeWalk(getRootElement());  
}   
public void treeWalk(Element element) {      
   for (int i = 0, size = element.nodeCount(); i < size; i++)    {           Node node = element.node(i);          
if (node instanceof Element) {            
treeWalk((Element) node);         
} else { // do something....          
}       }
}
4:字符串与XML的转换  
// XML转字符串  
Document document = ...;   
String text = document.asXML();
// 字符串转XML   
String text = <person> <name>James</name> </person>;   
Document document = DocumentHelper.parseText(text);
5. 创建XML    
这里创建一个XML,没有写   
public Document createDocument() {       
Document document = DocumentHelper.createDocument();      
Element root = document.addElement(root);      
Element author1 =root.addElement(author).addAttribute(name,James).addAttribute(location, UK).addText(JamesStrachan);       Element author2 =root.addElement(author).addAttribute(name,Bob).addAttribute(location, US).addText(Bob McWhirter);       return document;    }  
6: XML 文件输出  
FileWriter out = new FileWriter( foo.xml );    
document.write(out);     
DOM4j 的简单常用的方法上面总结了下,大家可以有一个印象,想要学的仔细了就要自己好好研究了,下面有一个以前写的小程序,实现了创建和编辑XML文件的功能。 
 
package com.dom4j.test;import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Iterator;
import java.util.List;import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;public class NewXML {/**
* 
* 用DOM4J创建一个XML文件
* @param args
*/

public boolean newXMl(String fileName){
  
   boolean returnValue=false;
  
   //定义一个XML文档
  
   Document docement=DocumentHelper.createDocument();
  
   //设置XML文档的元素
   Element rootElement=docement.addElement("DOM4J创建XML文档");
  
   rootElement.addComment("镜花水月2007-4-24晚上创建");
  
   Element nameElement=rootElement.addElement("镜花水月");
  
   nameElement.addAttribute("名字","不告诉你");
  
   Element schoolElement=nameElement.addElement("学校");
  
   schoolElement.setText("西安翻译学院");
  
   Element cityElement=rootElement.addElement("城市");
  
   cityElement.setText("上海");
  
   Element homeElement=cityElement.addElement("住址");
  
   homeElement.setText("徐家汇");
  
   //创建XML文档 
   try {
   
            /** 格式化输出,类型IE浏览一样 */
   
    OutputFormat format = OutputFormat.createPrettyPrint();
   
    /** 指定XML编码 */
   
    format.setEncoding("GBK");
   
    XMLWriter writer=new XMLWriter(new FileWriter(new File(fileName)),format); 
            
         writer.write(docement);
         
    writer.close();
   
    return returnValue=true;   
   
   
   } catch (IOException e) {
   
    e.printStackTrace();
   }
  
  
  
   return returnValue;
  
}

/**
* 
* 用DOM4J修改一个XML文件
* @param args
* 
*/

public boolean update(String fileName,String newFileName){
  
   boolean returnValaue=false;
  
  
  
   SAXReader reader=new SAXReader();
  
   try {
    Document docement=reader.read(new File(fileName));
   
    List list=null;
   
    list=docement.selectNodes("/DOM4J创建XML文档/镜花水月/@名字");
   
    Iterator it=list.iterator();
   
    while(it.hasNext()){
     Attribute attribute=(Attribute) it.next();
     if(attribute.getValue().equals("不告诉你")){
      attribute.setValue("还是不告诉你");
     }
    }
   
    //将就该写入新的文件 
   
    try {
     //转码
     OutputFormat format=OutputFormat.createPrettyPrint();
    
     format.setEncoding("GBK");
    
     XMLWriter writer=new XMLWriter(new FileWriter(new File(newFileName)),format);
    
     writer.write(docement);
    
     writer.close();
    
     return returnValaue=true;
    
    } catch (IOException e) {
    
     e.printStackTrace();
    }
   
   
   } catch (DocumentException e) {
   
    e.printStackTrace();
   }
  
   return returnValaue;
}
public static void main(String[] args) {
  
   NewXML newXml=new NewXML();
  
   String name="newXML.xml";
  
   String newName="UpdateXML.xml";
  
   if(!newXml.newXMl(name)){
    System.out.println("创建出现错误!");
    return ;
   }else{
    System.out.println("创建XML成功!");
   }
  
   if(!newXml.update(name,newName)){
    System.out.println("修改出现错误!");
    return;
   }else{
    System.out.println("修改XML成功");
   }
  }}

分享到:
评论

相关推荐

    我写的几个dom4j的入门例子.rar

    我写的几个dom4j的入门例子,有关读和写的常见功能。

    dom4j基础入门文档(SAX,DOM,XPATH)

    dom4j基础入门文档,与 W3C DOM API 相比,使用 dom4j 所包含的解析器的好处是 dom4j 拥有本地的 XPath 支持。

    DOM4J jar包 xml解析 所有的dom4j-1.6.1 dom4j-2.0.2 dom4j-2.1.1包 导入直接使用

    DOM4J jar包 所有的包 xml解析 dom4j-1.6.1 dom4j-2.0.2 dom4j-2.1.1 导入直接使用

    dom4j dom4j dom4j dom4j

    dom4j dom4j dom4j dom4j dom4j dom4j

    dom4j-2.1.1-API文档-中英对照版.zip

    赠送jar包:dom4j-2.1.1.jar; 赠送原API文档:dom4j-2.1.1-javadoc.jar; 赠送源代码:dom4j-2.1.1-sources.jar; 赠送Maven依赖信息文件:dom4j-2.1.1.pom; 包含翻译后的API文档:dom4j-2.1.1-javadoc-API文档-...

    JavaEE源代码 dom4j-1.6.1

    JavaEE源代码 dom4j-1.6.1JavaEE源代码 dom4j-1.6.1JavaEE源代码 dom4j-1.6.1JavaEE源代码 dom4j-1.6.1JavaEE源代码 dom4j-1.6.1JavaEE源代码 dom4j-1.6.1JavaEE源代码 dom4j-1.6.1JavaEE源代码 dom4j-1.6.1JavaEE源...

    中文 DOM4j入门例子.txt

    中文 DOM4j入门例子 一。解析XML 二。使用迭代器: 三。强大的导航使用XPath: 四。快速循环 五。创建一个新的XML文档 六。记录到一个文件中的一个文件, 七。转换为字符串 八。用XSLT样式文档

    dom4j-2.1.1-API文档-中文版.zip

    赠送jar包:dom4j-2.1.1.jar; 赠送原API文档:dom4j-2.1.1-javadoc.jar; 赠送源代码:dom4j-2.1.1-sources.jar; 赠送Maven依赖信息文件:dom4j-2.1.1.pom; 包含翻译后的API文档:dom4j-2.1.1-javadoc-API文档-...

    dom4j-1.6.1 与 dom4j-2.0.0-ALPHA

    dom4j-1.6.1.zip与 dom4j-2.0.0-ALPHA-2.jar

    dom4j_dom4j1.6.1安装包_

    maven dom4j 1.6.1安装包

    Dom4j 1.6.1 JAVA API

    dom4j帮助文档 官方API All Classes Packages org.dom4j org.dom4j.bean org.dom4j.datatype org.dom4j.dom org.dom4j.dtd org.dom4j.io org.dom4j.jaxb org.dom4j.rule org.dom4j.rule.pattern org.dom...

    dom4j-1.6.1.jar (dom4j) 欢迎下载

    dom4j-1.6.1.jar,Dom4j是一个Java的XML API接口,是jdom的进化版,dom4j基本用来读写xml文件,是一个十分优秀的JavaXML API接口

    DOM4J帮助文档及使用教程

    这个压缩包是一个关于DOM4J的压缩包,里面包含了DOM4J的帮助文档,DOM4J的使用教程,以及DOM4J这个JAVA包。保证这个压缩包是网上面最全的有关DOM4J的文档。

    资源jar包dom4j-1.6.1.rar

    dom4j是一个Java的XML API,是jdom的升级品,用来读写XML文件的。dom4j是一个十分优秀的JavaXML API,具有性能优异、功能强大和极其易使用的特点,它的性能超过sun公司官方的dom技术,同时它也是一个开放源代码的...

    dom4j.rar=dom4j API+dom4j.jar

    dom4j.rar 包括dom4j API帮助文档和dom4j.jar包.dom4j是一个Java的XML API,是jdom的升级品,用来读写XML文件的。dom4j是一个十分优秀的JavaXML API,具有性能优异、功能强大和极其易使用的特点

    dom4j api 参考手册

    org.dom4j.bean An implementation of the dom4j API which allows JavaBeans to be used to store and retrieve attribute values from Element. org.dom4j.datatype An implementation of the dom4j API which ...

    Dom4j解析XML文档.doc

    Dom4j解析XML文档.doc Dom4j解析XML文档.doc Dom4j解析XML文档.doc Dom4j解析XML文档.doc

    dom4j 源码

    dom4j 源码 dom4j 源码 dom4j 源码 dom4j 源码 dom4j 源码 dom4j 源码

    DOM4j教程 例子

    DOM4j教程 例子 DOM4j教程 例子 DOM4j教程 例子 DOM4j教程 例子

    Dom4j常用jar包

    Dom4j常用jar包Dom4j常用jar包Dom4j常用jar包Dom4j常用jar包Dom4j常用jar包Dom4j常用jar包

Global site tag (gtag.js) - Google Analytics