`

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 = James ;
    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(James Strachan);
       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属性的详细介绍及相关的例子

    10. **Node**:`Node`是DOM4j中所有XML节点的基类,提供了统一的访问和操作方法,包括元素、属性、文本、注释等。 11. **NodeFilter**:`NodeFilter`定义了一个过滤器接口,允许你在遍历DOM4j树时根据特定条件筛选...

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

    在项目中使用DOM4J时,只需将相应的jar包(如dom4j-1.6.1.jar、dom4j-2.0.2.jar或dom4j-2.1.1.jar)导入到类路径中,即可开始利用其功能处理XML文档。导入后,可以按照DOM4J提供的API进行编程,快速实现XML的读写...

    dom4j-1.6.1 与 dom4j-2.0.0-ALPHA

    首先,DOM4J 1.6.1是较早的一个稳定版本,广泛应用于各种项目。它支持SAX和DOM解析器,同时提供了基于事件的解析模型和基于树的解析模型。此版本的主要特性包括: 1. 支持XPath:DOM4J提供了一种强大的方式来查询...

    DOM4J帮助文档及使用教程

    3. **基本概念**:介绍DOM4J中的核心类,如`Document`(文档对象)、`Element`(元素)、`Attribute`(属性)、`Text`(文本节点)等,以及它们之间的关系。 4. **解析XML**:讲解如何使用DOM4J解析XML文件,包括...

    dom4j-2.1.3.zip

    1. **灵活的文档构建**:DOM4J提供了多种方式来创建和修改XML文档,如通过元素、属性、文本节点等对象直接操作,或者使用XPath表达式定位。 2. **强大的查询能力**:DOM4J支持XPath,可以方便地通过路径表达式查找...

    dom4j-2.0.3.zip

    DOM4J中的Attribute类提供了创建、修改和删除属性的方法。 3. **Document**: Document类表示整个XML文档,是整个XML结构的根节点。它包含了XML文档的声明、元素、注释等所有信息。 4. **XPath**: DOM4J支持XPath...

    dom4j所依赖的所有jar包

    2. **文档对象模型**:DOM4J提供了Element、Attribute、Namespace等类,这些类代表了XML文档中的元素、属性和命名空间。它们提供了丰富的API,可以方便地进行添加、删除、查找和修改操作。 3. **XPath支持**:DOM4J...

    dom4j.jar 下载

    在Java应用程序中,DOM4J作为一个流行的选择,尤其在处理复杂的XML结构时,因为它提供了比标准DOM(Document Object Model)更简单和更有效的接口。 标题中的"dom4j.jar下载"指的是获取DOM4J库的可执行文件,即Java...

    dom4j 2.1.1

    XML(eXtensible Markup Language)作为一种结构化数据格式,在网络应用、配置文件、数据交换等方面广泛应用,DOM4J作为其解析工具,为开发者提供了便利。 DOM4J的主要特点包括: 1. 易于使用:DOM4J的API设计直观...

    DOM4J 的使用

    DOM4J 是一个开源的 XML 解析包,由 dom4j.org 出品,应用于 Java 平台,采用了 Java 集合框架并完全支持 DOM、SAX 和 JAXP。DOM4J 的主要特点是使用大量的接口,所有主要接口都在 org.dom4j 里面定义。 一、DOM4J ...

    dom4j的Java工程

    DOM4J的核心类包括`Element`、`Attribute`、`Document`和`Namespace`等,它们分别代表了XML文档中的元素、属性、文档和命名空间。 **XML解析:** DOM4J提供了多种解析XML文档的方式,如SAX、DOM和StAX。其中,SAX是...

    dom4j-api 应用文档 很实用的

    **DOM4J API 应用文档详解** DOM4J 是一个强大的、开源的Java库,专门用于处理XML文档。它提供了灵活且高效的API,使得XML的解析、创建、修改变得简单易行。DOM4J这个名字中的"4J"代表它是为Java设计的,而"DOM"则...

    dom4j-1.6.1

    - DOM4J的核心思想是提供一个灵活的、面向对象的模型来处理XML文档,包括元素、属性、文本节点等。 - 它不仅支持标准的DOM API,还提供了基于事件的SAX解析器和一个XPath实现,以满足不同场景的需求。 2. **主要...

    dom4j所需要的包和依赖包

    - **Element**:DOM4J中的元素类代表XML文档中的标签,包含了属性、子元素等信息。 - **Attribute**:元素的属性,用于描述元素的特性。 - **Document**:整个XML文档的根对象,包含根元素和其他元素。 - **...

    dom4j(2.1.1+ 2.0.2+ 1.6.1).zip

    **DOM4J库详解** DOM4J是一款强大的Java XML处理库,它提供了全面而灵活的API,用于处理XML文档。这个压缩包包含了DOM4J的三个不同版本:2.1.1、2.0.2和1.6.1,分别对应不同的Java环境兼容性。 1. **DOM4J 2.1.1**...

    dom4j解析xml详解

    - **配置文件解析**: 许多应用使用XML作为配置文件的格式,DOM4J可以方便地读取和更新这些配置信息。 - **Web服务**: 在SOAP等协议中,XML是常用的数据传输格式,DOM4J能够帮助构建和解析这些XML消息。 - **文档生成...

Global site tag (gtag.js) - Google Analytics