dom4j简介(转)

DOM4J 是 dom4j.org 出品的一个开源 XML 解析包,它的网站中这样定义: 

Dom4j is an easy to use, open source library for working with XML, XPath and XSLT on the Java platform using the Java Collections Framework and with full support for DOM, SAX and JAXP. 

Dom4j 是一个易用的、开源的库,用于 XML , XPath 和 XSLT 。它应用于 Java 平台,采用了 Java 集合框架并完全支持 DOM , SAX 和 JAXP 。 最好使用 1.5 的版本 , 有两个包文件 , dom4j-1.5.jar 和 dom4j-full.jar ,目前 1.6 的还不稳定。下载网址: http://sourceforge.net/projects/dom4j 。 

Dom4j.jar 包括 dom4j 类和 XPath 引擎,但是不含 SAX 与 DOM 接口。

它的主要接口都在 org.dom4j 这个包里定义: 

Attribute 

Attribute 定义了 XML 的属性 

Branch 

Branch 为能够包含子节点的节点如 XML 元素 (Element) 和文档 (Docuemnts) 定义了一个公共的行为, 

CDATA 

CDATA 定义了 XML CDATA 区域 

CharacterData 

CharacterData 是一个标识借口,标识基于字符的节点。如 CDATA , Comment, Text. 

Comment 

Comment 定义了 XML 注释的行为 

Document 

定义了 XML 文档 

DocumentType 

DocumentType 定义 XML DOCTYPE 声明 

Element 

Element 定义 XML 元素 

ElementHandler 

ElementHandler 定义了 Element 对象的处理器 

ElementPath 

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

Entity 

Entity 定义 XML entity 

Node 

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

NodeFilter 

NodeFilter 定义了在 dom4j 节点中产生的一个滤镜或谓词的行为( predicate ) 

ProcessingInstruction 

ProcessingInstruction 定义 XML 处理指令 . 

Text 

Text 定义 XML 文本节点 . 

Visitor 

Visitor 用于实现 Visitor 模式 . 

XPath 

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

 

一、 使用 

1 、创建 XML 文档 

dom4j 创建 xml generateDocument() 需要以下四步:创建文档、添加根元素、添加子元素、添加元素内容、写 XML 文件。 

使用的类有 org.dom4j.Document,org.dom4j.DocumentHelper, 

org.dom4j.Element 类。 

代码如下: 

import org.dom4j.Document; // 导入 dom4j API 类 

import org.dom4j.DocumentException; 

import org.dom4j.Element; 

import org.dom4j.Attribute; 

import org.dom4j.DocumentHelper; 

import org.dom4j.io.OutputFormat; 

import org.dom4j.io.XMLWriter; 

import org.dom4j.io.SAXReader; 

import java.io.*; 

import java.util.List; 

import java.util.Iterator; 

public class Rt 

public Document generateDocument() 

// 使用 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"); 

 

// 向 journal 元素中添加 article 元素 , 使用 addAttribute() 方法向 article 元素添加 level,date 属性 

Element articleElement=journalElement.addElement("article"); 

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,lastname 元素 , 并用 setText() 设置他们的文本 

Element firstNameElement=authorElement.addElement("firstname"); 

firstNameElement.setText("Marcello"); 

Element lastNameElement=authorElement.addElement("lastname"); 

lastNameElement.setText("Vitaletti"); 

 

return document; 

// 使用 addDocType() 方法添加文档类型说明 

//document.addDocType("catalog",null,"file://c:/Dtds/catalog.dtd"); 

/**try 

XMLWriter output = new XMLWriter( 

new FileWriter( new File("mycatalog.xml") )); 

output.write( document ); 

output.close(); 

catch(IOException e) 

{System.out.println(e.getMessage());}**/ 

/** 

* 格式化 XML 文档 , 并按指定字符集输出 

* @param document 

* @param fileName 

* @param encoding 编码格式 

* @return 返回操作结果 , 0 表失败 , 1 表成功 

*/ 

public static int saveXml(Document document, 

String fileName, 

String encoding) 

throws UnsupportedEncodingException, 

FileNotFoundException, 

IOException{ 

int returnValue = 0; 

XMLWriter output = null; 

/** 格式化输出 , 类型 IE 浏览一样 */ 

OutputFormat format = OutputFormat.createPrettyPrint(); 

 

/** 指定 XML 字符集编码 */ 

format.setEncoding(encoding); 

output = new XMLWriter(new FileOutputStream(new File(fileName)), format); 

output.write(document); 

output.close(); 

 

/** 执行成功 , 需返回 1 */ 

returnValue = 1; 

return returnValue; 

 

/** 

* 修改 XML 文档 , 并按指定字符集输出 

* @param inputXml 

* @param modified_filename 修改后的文件名(含绝对路径) 

* @return 返回操作结果 , 0 表失败 , 1 表成功 

*/ 

 

public int modifyDocument(File inputXml,String modified_filename) 

 

int returnValue = 0; 

try{ 

SAXReader saxReader = new SAXReader(); 

Document document = saxReader.read(inputXml); 

 

// 根据 XPath 语法查询结点 catalog 下的 journal 下的 article 的 level 属性 

List list = document.selectNodes("/catalog/journal/article/@level" ); 

Iterator iter=list.iterator(); 

while(iter.hasNext()){ 

Attribute attribute=(Attribute)iter.next(); 

if(attribute.getValue().equals("Intermediate")) // 如果属性值是 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(modified_filename) )); 

output.write( document ); 

output.close(); 

} catch(DocumentException e) 

System.out.println(e.getMessage()); 

} catch(IOException e){ 

System.out.println(e.getMessage()); 

/** 执行成功 , 需返回 1 */ 

returnValue = 1; 

return returnValue; 

 

public static void main(String[] argv) 

Rt savedomtoxml=new Rt(); 

Document doc=savedomtoxml.generateDocument(); 

try{ 

int re=savedomtoxml.saveXml(doc,"savexml.xml","gb2312"); // 生成的 xml 文件默认状态和类文件在同一个目录下 

System.out.println(re); 

} catch(IOException e) 

{System.out.println(e.getMessage());} 

try{ 

int modifyre=savedomtoxml.modifyDocument(new File("H:/dom4j/rt/orginal.xml")); 

System.out.println(modifyre); 

} catch(Exception e) 

{System.out.println(e.getMessage());} 


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值