domj4 API 创建与修改 XML 文档

原创 2004年06月26日 19:10:00

 使用 domj4 API 创建与修改 XML 文档
级别:入门
 

Deepak Vohra (dvohra09@yahoo.com)
Web 开发人员
2004 年 4 月

dom4j 是一种解析 XML 文档的开放源代码 XML 框架。本文介绍如何使用包含在 dom4j 中的解析器创建并修改 XML 文档。
dom4j API 包含一个解析 XML 文档的工具。本文中将使用这个解析器创建一个示例 XML 文档。清单 1 显示了这个示例 XML 文档,catalog.xml。

清单 1. 示例 XML 文档(catalog.xml)

<?xml version="1.0" encoding="UTF-8"?>


<?target instruction?>
                    publisher="IBM developerWorks">


 
 
     Marcello
     Vitaletti
 
 

 

 

然后使用同一个解析器修改 catalog.xml,清单 2 是修改后的 XML 文档,catalog-modified.xml。

清单 2. 修改后的 XML 文档(catalog-modified.xml)

<?xml version="1.0" encoding="UTF-8"?>


<?target instruction?>
                     publisher="IBM developerWorks">


 
 
     Ayesha
     Malik
 
 

 

 

与 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 文档中增加文档类型说明:

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"));

                                        }

   }

 

这一节说明了如何使用 dom4j 中的解析器修改示例 XML 文档。这个解析器不使用 DTD 或者模式验证 XML 文档。如果 XML 文档需要验证,可以解释用 dom4j 与 JAXP SAX 解析器。

结束语
包含在 dom4j 中的解析器是一种用于解析 XML 文档的非验证性工具,可以与JAXP、Crimson 或 Xerces 集成。本文说明了如何使用该解析器创建和修改 XML 文档。

参考资料

请访问 dom4j Web 站点,那里有一个很有用的 FAQ。


阅读 XML.com 上的文章“dom4j: the flexible XML framework for Java”。


通过 Dennis Sosnoski 的 developerWorks 文章“文档模型,第一部分:性能”(2001 年9 月)和“Java 文档模型的用法”(2002 年 2 月)进一步研究 dom4j。


通过 Elliotte Rusty Harold 的“Processing XML with Java”了解如何编制读写 XML 文档的 Java 程序。


在 developerWorks XML 和 Web 服务专区可以找到更多的 XML 资源。也可以订阅每周一期的 Web 服务/XML 技巧新闻邮件。


在 developerWorks Developer Bookstore 可以找到各种关于 XML 的书籍。


了解如何才能成为一名 IBM 认证的 XML 及相关技术的开发人员。

 

关于作者
Deepak Vohra(
dvohra09@yahoo.com)是一位 Web 开发人员、NuBean 顾问和 Sun 认证的 Java 1.4 程序员。可以通过 dvohra09@yahoo.com 与他联系。 

domj4 API 创建与修改 XML 文档

使用 domj4 API 创建与修改 XML 文档级别: 初级 Deepak VohraWeb 开发人员2004 年 4 月 dom4j 是一种解析 XML 文档的开放源代码 XML 框架。本文介绍如...
  • terui668
  • terui668
  • 2007年12月24日 23:36
  • 775

使用 domj4 API 创建与修改 XML 文档

dom4j 是一种解析 XML 文档的开放源代码 XML 框架。本文介绍如何使用包含在 dom4j 中的解析器创建并修改 XML 文档。 dom4j API 包含一个解析 XML 文档的工具。本文中将...
  • litoyao
  • litoyao
  • 2010年01月18日 22:40
  • 222

使用domj4 API 创建与修改 XML 文档

dom4j 是一种解析 XML 文档的开放源代码 XML 框架。本文介绍如何使用包含在 dom4j 中的解析器创建并修改 XML 文档。dom4j API 包含一个解析 XML 文档的工具。本文中将使...
  • jiangfeng861016
  • jiangfeng861016
  • 2009年10月31日 20:42
  • 266

java Domj4读取xml文件

先概括,再以代码形式给出。                    获取节点:                          Iterator  Element.nodeIterator();  ...
  • qq_32059827
  • qq_32059827
  • 2016年05月26日 20:54
  • 850

Domj4读取xml文件步骤及方法

4.5 Dom4j工具 非官方,不在jdk中。使用步骤: 1)导入dom4j的核心包。 dom4j-1.6.1.jar ...
  • a1837634447
  • a1837634447
  • 2016年11月30日 13:02
  • 626

xml将现有节点从一个文档复制到另一个文档

ImportNode 方法是将节点或整个节点子树从一个 XmlDocument 复制到另一个 XmlDocument 的机制。调用返回的节点是源文档节点的副本,其中包括属性值、节点名、节点类型以及所有...
  • xueer8835
  • xueer8835
  • 2011年06月23日 12:00
  • 4494

查看文档创建日期、修改日期和文档大小

一 介绍 查看文档创建日期、修改日期和文档大小,可以使用fileCreatedDate属性、fileModifiedDate 属性、lastModified属性和fileSize属性来实现。 fi...
  • chengqiuming
  • chengqiuming
  • 2017年04月12日 10:41
  • 603

JS 操作 XML 的 API

文档对象模型(DOM) 文档对象模型(DOM)是表示文档(比如HTML和XML)和访问、操作构成文档的各种元素的应用程序接口(API)。一般的,支持 Javascript的所有浏览器都支持DOM。本...
  • zy609398738
  • zy609398738
  • 2011年04月21日 14:14
  • 2208

Java&Xml教程(一)简介

XML是广泛用于数据传输和存储的技术。Java语言提供个各种各样的API来解析XML,例如DOM、SAX、StAX、JAXB。也还有一些其他的API用于解析XML,例如JDOM。本教程的目的是探索使用...
  • Rongbo_J
  • Rongbo_J
  • 2015年12月07日 20:33
  • 1579

PHP 创建、增加、删除、修改 xml

创建xml 方法:
  • k8080880
  • k8080880
  • 2015年08月13日 18:03
  • 1865
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:domj4 API 创建与修改 XML 文档
举报原因:
原因补充:

(最多只允许输入30个字)