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

Dom4j详细分析

阅读更多
dom4j 是一种解析 XML 文档的开放源代码 XML 框架。本文介绍如何使用包含在 dom4j 中的解析器创建并修改 XML 文档。   
dom4j API 包含一个解析 XML 文档的工具。本文中将使用这个解析器创建一个示例 XML 文档。清单 1 显示了这个示例 XML 文档,catalog.xml。   
  
清单 1. 示例 XML 文档(catalog.xml)    
<?xml version="1.0" encoding="UTF-8"?>    
<catalog>    
<!--An XML Catalog-->    
<?target instruction?>   
  <journal title="XML Zone"    
                  publisher="IBM developerWorks">    
<article level="Intermediate" date="December-2001">   
<title>Java configuration with XML Schema</title>    
<author>    
     <firstname>Marcello</firstname>    
     <lastname>Vitaletti</lastname>    
</author>   
  </article>   
  </journal>    
</catalog>   
    
  
  
然后使用同一个解析器修改 catalog.xml,清单 2 是修改后的 XML 文档,catalog-modified.xml。   
  
清单 2. 修改后的 XML 文档(catalog-modified.xml)    
<?xml version="1.0" encoding="UTF-8"?>    
<catalog>    
<!--An XML catalog-->    
<?target instruction?>   
  <journal title="XML Zone"  
                   publisher="IBM developerWorks">    
<article level="Introductory" date="October-2002">   
<title>Create flexible and extensible XML schemas</title>    
<author>    
     <firstname>Ayesha</firstname>    
     <lastname>Malik</lastname>    
</author>    
  </article>   
  </journal>    
</catalog>   
    
  
  
与 W3C DOM API 相比,使用 dom4j 所包含的解析器的好处是 dom4j 拥有本地的 XPath 支持。DOM 解析器不支持使用 XPath 选择节点。   
  
本文包括以下几个部分:   
  
预先设置    
创建文档    
修改文档    
预先设置   
  
这个解析器可以从 http://dom4j.org 获取。通过设置使 dom4j-1.4/dom4j-full.jar 能够在 classpath 中访问,该文件中包括 dom4j 类、XPath 引擎以及 SAX 和 DOM 接口。如果已经使用了 JAXP 解析器中包含的 SAX 和 DOM 接口,向 classpath 中增加 dom4j-1.4/dom4j.jar 。 dom4j.jar 包括 dom4j 类和 XPath 引擎,但是不含 SAX 与 DOM 接口。    
  
  
  
    
  
  
回页首    
    
  
  
  
创建文档   
  
本节讨论使用 dom4j API 创建 XML 文档的过程,并创建示例 XML 文档 catalog.xml。   
  
使用 import 语句导入 dom4j API 类:   
  
import org.dom4j.Document;   
import org.dom4j.DocumentHelper;   
import org.dom4j.Element;   
    
  
  
使用 DocumentHelper 类创建一个文档实例。 DocumentHelper 是生成 XML 文档节点的 dom4j API 工厂类。    
  
Document document = DocumentHelper.createDocument();    
  
  
使用 addElement() 方法创建根元素 catalog 。 addElement() 用于向 XML 文档中增加元素。    
  
Element catalogElement = document.addElement("catalog");    
  
  
在 catalog 元素中使用 addComment() 方法添加注释“An XML catalog”。    
  
catalogElement.addComment("An XML catalog");    
  
  
在 catalog 元素中使用 addProcessingInstruction() 方法增加一个处理指令。    
  
catalogElement.addProcessingInstruction("target","text");    
  
  
在 catalog 元素中使用 addElement() 方法增加 journal 元素。    
  
Element journalElement =  catalogElement.addElement("journal");    
  
  
使用 addAttribute() 方法向 journal 元素添加 title 和 publisher 属性。    
  
journalElement.addAttribute("title", "XML Zone");   
         journalElement.addAttribute("publisher", "IBM developerWorks");    
  
  
向 article 元素中添加 journal 元素。    
  
Element articleElement=journalElement.addElement("article");    
  
  
为 article 元素增加 level 和 date 属性。    
  
articleElement.addAttribute("level", "Intermediate");   
      articleElement.addAttribute("date", "December-2001");    
  
  
向 article 元素中增加 title 元素。    
  
Element titleElement=articleElement.addElement("title");    
  
  
使用 setText() 方法设置 article 元素的文本。    
  
titleElement.setText("Java configuration with XML Schema");    
  
  
在 article 元素中增加 author 元素。    
  
Element authorElement=articleElement.addElement("author");    
  
  
在 author 元素中增加 firstname 元素并设置该元素的文本。    
  
Element  firstNameElement=authorElement.addElement("firstname");   
     firstNameElement.setText("Marcello");    
  
  
在 author 元素中增加 lastname 元素并设置该元素的文本。    
  
Element lastNameElement=authorElement.addElement("lastname");   
     lastNameElement.setText("Vitaletti");    
  
  
可以使用 addDocType() 方法添加文档类型说明。    
  
document.addDocType("catalog", null,"file://c:/Dtds/catalog.dtd");    
  
  
这样就向 XML 文档中增加文档类型说明:   
  
<!DOCTYPE catalog SYSTEM "file://c:/Dtds/catalog.dtd">    
  
  
如果文档要使用文档类型定义(DTD)文档验证则必须有 Doctype。   
  
XML 声明 <?xml version="1.0" encoding="UTF-8"?> 自动添加到 XML 文档中。    
  
清单 3 所示的例子程序 XmlDom4J.java 用于创建 XML 文档 catalog.xml。   
  
清单 3. 生成 XML 文档 catalog.xml 的程序(XmlDom4J.java)    
import org.dom4j.Document;   
import org.dom4j.DocumentHelper;   
import org.dom4j.Element;   
import org.dom4j.io.XMLWriter;   
import java.io.*;   
public class XmlDom4J{   
public void generateDocument(){   
Document document = DocumentHelper.createDocument();   
     Element catalogElement = document.addElement("catalog");   
     catalogElement.addComment("An XML Catalog");   
     catalogElement.addProcessingInstruction("target","text");   
     Element journalElement =  catalogElement.addElement("journal");   
     journalElement.addAttribute("title", "XML Zone");   
     journalElement.addAttribute("publisher", "IBM developerWorks");   
     Element articleElement=journalElement.addElement("article");   
     articleElement.addAttribute("level", "Intermediate");   
     articleElement.addAttribute("date", "December-2001");   
     Element  titleElement=articleElement.addElement("title");   
     titleElement.setText("Java configuration with XML Schema");   
     Element authorElement=articleElement.addElement("author");   
     Element  firstNameElement=authorElement.addElement("firstname");   
     firstNameElement.setText("Marcello");   
     Element lastNameElement=authorElement.addElement("lastname");   
     lastNameElement.setText("Vitaletti");   
     document.addDocType("catalog",   
                           null,"file://c:/Dtds/catalog.dtd");   
    try{   
    XMLWriter output = new XMLWriter(   
            new FileWriter( new File("c:/catalog/catalog.xml") ));   
        output.write( document );   
        output.close();   
        }   
     catch(IOException e){System.out.println(e.getMessage());}   
}   
public static void main(String[] argv){   
XmlDom4J dom4j=new XmlDom4J();   
dom4j.generateDocument();   
}}   
    
  
  
这一节讨论了创建 XML 文档的过程,下一节将介绍使用 dom4j API 修改这里创建的 XML 文档。    
  
  
  
    
  
  
回页首    
    
  
  
  
修改文档   
  
这一节说明如何使用 dom4j API 修改示例 XML 文档 catalog.xml。   
  
使用 SAXReader 解析 XML 文档 catalog.xml:   
  
SAXReader saxReader = new SAXReader();   
Document document = saxReader.read(inputXml);    
  
  
SAXReader 包含在 org.dom4j.io 包中。    
  
inputXml 是从 c:/catalog/catalog.xml 创建的 java.io.File。使用 XPath 表达式从 article 元素中获得 level 节点列表。如果 level 属性值是“Intermediate”则改为“Introductory”。    
  
List list = document.selectNodes("//article/@level" );   
      Iterator iter=list.iterator();   
        while(iter.hasNext()){   
            Attribute attribute=(Attribute)iter.next();   
               if(attribute.getValue().equals("Intermediate"))   
               attribute.setValue("Introductory");    
       }    
  
  
获取 article 元素列表,从 article 元素中的 title 元素得到一个迭代器,并修改 title 元素的文本。    
  
list = document.selectNodes("//article" );   
     iter=list.iterator();   
   while(iter.hasNext()){   
       Element element=(Element)iter.next();   
      Iterator iterator=element.elementIterator("title");   
   while(iterator.hasNext()){   
   Element titleElement=(Element)iterator.next();   
   if(titleElement.getText().equals("Java configuration with XML Schema"))   
     titleElement.setText("Create flexible and extensible XML schema");   
    }}    
  
  
通过和 title 元素类似的过程修改 author 元素。    
  
清单 4 所示的示例程序 Dom4JParser.java 用于把 catalog.xml 文档修改成 catalog-modified.xml 文档。   
  
清单 4. 用于修改 catalog.xml 的程序(Dom4Jparser.java)    
import org.dom4j.Document;   
import org.dom4j.Element;   
import org.dom4j.Attribute;   
import java.util.List;   
import java.util.Iterator;   
import org.dom4j.io.XMLWriter;   
import java.io.*;   
import org.dom4j.DocumentException;   
import org.dom4j.io.SAXReader;    
public class Dom4JParser{   
public void modifyDocument(File inputXml){   
  try{   
   SAXReader saxReader = new SAXReader();   
   Document document = saxReader.read(inputXml);   
   List list = document.selectNodes("//article/@level" );   
   Iterator iter=list.iterator();   
   while(iter.hasNext()){   
    Attribute attribute=(Attribute)iter.next();   
    if(attribute.getValue().equals("Intermediate"))   
      attribute.setValue("Introductory");    
       }   
      
   list = document.selectNodes("//article/@date" );   
   iter=list.iterator();   
   while(iter.hasNext()){   
    Attribute attribute=(Attribute)iter.next();   
    if(attribute.getValue().equals("December-2001"))   
      attribute.setValue("October-2002");   
       }   
   list = document.selectNodes("//article" );   
   iter=list.iterator();   
   while(iter.hasNext()){   
    Element element=(Element)iter.next();   
    Iterator iterator=element.elementIterator("title");   
      while(iterator.hasNext()){   
        Element titleElement=(Element)iterator.next();   
        if(titleElement.getText().equals("Java configuration with XML   
      Schema"))   
        titleElement.setText("Create flexible and extensible XML schema");   
                                          }   
                                }   
    list = document.selectNodes("//article/author" );   
    iter=list.iterator();   
     while(iter.hasNext()){   
     Element element=(Element)iter.next();   
     Iterator iterator=element.elementIterator("firstname");   
     while(iterator.hasNext()){   
      Element firstNameElement=(Element)iterator.next();   
      if(firstNameElement.getText().equals("Marcello"))   
      firstNameElement.setText("Ayesha");   
                                     }   
                              }   
    list = document.selectNodes("//article/author" );   
    iter=list.iterator();   
     while(iter.hasNext()){   
      Element element=(Element)iter.next();   
      Iterator iterator=element.elementIterator("lastname");   
     while(iterator.hasNext()){   
      Element lastNameElement=(Element)iterator.next();   
      if(lastNameElement.getText().equals("Vitaletti"))   
      lastNameElement.setText("Malik");   
                                  }   
                               }   
     XMLWriter output = new XMLWriter(   
      new FileWriter( new File("c:/catalog/catalog-modified.xml") ));   
     output.write( document );   
     output.close();   
   }   
    
  catch(DocumentException e)   
                 {   
                  System.out.println(e.getMessage());   
                            }   
  catch(IOException e){   
                       System.out.println(e.getMessage());   
                    }   
}   
public static void main(String[] argv){   
  Dom4JParser dom4jParser=new Dom4JParser();   
  dom4jParser.modifyDocument(new File("c:/catalog/catalog.xml"));   
                                        }   
   }   


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/zhiguozhu/archive/2010/01/20/5216018.aspx
0
0
分享到:
评论

相关推荐

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

    6. **StAX(Streaming API for XML)支持**:DOM4J也支持StAX解析器,这种解析方式结合了SAX的高效和DOM的易用性,可以在处理大型XML文件时节省内存。 7. **与JAXB集成**:DOM4J可以与Java Architecture for XML ...

    dom4j解析xml详解

    ### DOM4J解析XML详解 #### 一、DOM4J简介与特性 DOM4J是一个由dom4j.org开发的开源XML解析包,专为Java平台设计,它不仅支持DOM、SAX和JAXP标准,还巧妙地融入了Java集合框架,使其成为Java开发者在处理XML数据时...

    dom4j解析xml文件的压缩包

    5. **事件驱动解析(SAX)**:除了传统的DOM解析外,DOM4J还支持SAX解析器,这种解析方式适用于处理大型XML文件,因为它不需要一次性加载整个文档到内存。 6. **Namespace支持**:DOM4J提供了对XML命名空间的全面...

    利用DOM4J解析SOAP的简单示例

    本篇文章将深入探讨如何利用DOM4J解析SOAP消息中的元素,以便在实际项目中进行有效的数据提取和操作。 首先,理解SOAP消息的结构至关重要。一个典型的SOAP消息如下所示: ```xml &lt;!-- Header元素中的内容 --&gt; ...

    dom4j-1.6.1 与 dom4j-2.0.0-ALPHA

    4. 可扩展性:DOM4J允许用户自定义解析策略和处理器,以满足特定需求。 5. 支持XML Schema和DTD:能够验证XML文档是否符合预定义的模式或规范。 接下来,DOM4J 2.0.0-ALPHA是后续的一个实验性版本,引入了一些新...

    Dom4j解析XML文档.doc

    在本文中,我们将深入探讨如何使用DOM4J来解析和操作XML文档。 首先,要使用DOM4J,你需要下载其库文件。官方站点位于http://www.dom4j.org,你可以在这里找到最新的DOM4J包,例如dom4j-1.6.1.zip。解压缩后,你会...

    dom4j框架解析教程

    ### DOM4J框架解析教程 #### 一、DOM4J简介 DOM4J是一个非常优秀的XML解析工具,它由dom4j.org开发并提供。该工具不仅免费且开源,广泛应用于Java平台上,提供了对XML、XPath及XSLT的强大支持。DOM4J的设计充分考虑...

    dom4j_dom4j1.6.1安装包_

    DOM4J的核心特性包括XML文档的构建、解析、查询和修改。它还提供了XPath支持,允许开发者通过简洁的表达式来定位XML文档中的元素。 DOM4J 1.6.1是该库的一个稳定版本,发布于2007年。这个版本包含了之前版本的改进...

    dom4j 解析(读取) xml 节点数据

    在本教程中,我们将深入探讨如何使用DOM4J解析(读取)XML节点数据,不受XML层级的限制。 首先,确保你已经下载了必要的依赖,即DOM4J库。通常,这将是一个名为`dom4j-x.x.x.jar`的文件,其中x.x.x是DOM4J的版本号...

    dom4j dom4j dom4j dom4j

    3. **事件驱动模型**:DOM4J同时支持SAX解析器的事件驱动模型,这在处理大型XML文件时,可以避免一次性加载整个文档到内存,从而节省资源。 4. **文档对象模型**:DOM4J提供了一个类似于DOM的文档对象模型,但比DOM...

    dom4j_1.6.1.jar dom4j_2.1.0.jar

    3. **解析XML**:DOM4J提供两种主要的解析方式,SAX解析和DOM解析。SAX解析适用于大型XML文件,因为它以流式处理数据,占用内存小;DOM解析则将整个XML文档加载到内存,便于操作,适合小型文件。 4. **操作XML**:...

    dom4j-2.1.3.zip

    《深入解析DOM4J 2.1.3》 DOM4J是一个强大的Java XML API,它提供了丰富的XML处理功能,包括文档对象模型(DOM)、简单API(SAX)以及事件驱动模型(StAX)。在本篇文章中,我们将深入探讨DOM4J 2.1.3版本,了解其...

    使用dom4j 和本地dom 解析xml 文件

    在Java中,解析XML文件是常见的任务,通常有DOM(Document Object Model)和DOM4J两种方式。下面我们将详细探讨这两种解析方法。 DOM解析方式是将整个XML文件加载到内存中,形成一棵DOM树,每个节点代表XML文档的一...

    dom4j dom4j1.6 dom4j最新版

    4. **事件驱动模型**:与SAX解析器配合,DOM4J提供了一个基于事件的处理模型,可以在解析过程中对特定事件作出反应,如元素开始、结束等。 5. **转换和序列化**:DOM4J可以将XML文档转换为其他格式,如HTML或者DOM,...

    dom4j-2.0.3.zip

    本篇将详细介绍DOM4J的核心概念、主要功能以及如何在实际项目中运用。 一、DOM4J简介 DOM4J是基于DOM模型的,但相比Java内置的DOM API,DOM4J更轻量级且易于使用。它支持XPath查询,提供了丰富的事件处理机制,...

    dom4j---xml解析jar包

    **DOM4J——XML解析库详解** XML(eXtensible Markup Language)作为一种标记语言,广泛应用于数据交换、配置文件和文档存储等领域。在Java环境中,解析XML文档时,我们通常会遇到各种库,其中DOM4J是一个非常流行...

    Dom4j遍历解析XML

    Dom4j 遍历解析 XML Dom4j 是一个基于 Java 的 XML 解析库,提供了广泛的 XML 解析功能。Dom4j 遍历解析 XML 是指使用 Dom4j 库来解析和遍历 XML 文档,提取其中的元素、属性和值。 在 Dom4j 中,遍历 XML 文档...

    dom4j所依赖的所有jar包

    1. **XML解析**:DOM4J支持多种解析方式,包括SAX解析、DOM解析和DOM4J自己的解析器。SAX解析适用于大文件,因为它按需读取,节省内存;DOM解析则将整个XML文档加载到内存,适合小文件;DOM4J解析器则提供了更灵活的...

    DOM4J xml解析工具

    DOM4J的名字来源于Document Object Model (DOM) 和 Java的结合,但它并不局限于DOM模型,同时也支持SAX和STAX解析器,因此在处理大型XML文件时,它能提供比纯DOM更好的性能。 XML(eXtensible Markup Language)是...

    所有版本的dom4j工具包

    1. **XML解析与构建**:DOM4J支持SAX和DOM解析器,可以将XML文档解析为树形结构。同时,它也提供了构建XML文档的方法,允许开发者动态创建XML内容。 2. **XPath支持**:DOM4J实现了XPath,这是一种强大的查询XML...

Global site tag (gtag.js) - Google Analytics