Dom4j 使用心得
来源:互联网 发布:米格25 米格31 知乎 编辑:程序博客网 时间:2024/05/10 18:54
优秀网站:
http://www.zvon.org/xxl/XPathTutorial/General/examples.html 学习XPath操作
http://blog.iyi.cn/tech/2005/10/dom4jxml.html 用Dom4j解析XML及中文问题
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。
Dom4j.jar
包括 dom4j 类和 XPath 引擎,但是不含 SAX 与 DOM 接口。最好使用1.5的版本,有两个包文件, dom4j-1.5.jar和dom4j-full.jar,目前1.6的还不稳定。下载网址:http://sourceforge.net/projects/dom4j。
它的主要接口都在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());}
}
}
- Dom4j 使用心得
- dom4j的使用心得
- dom4j心得
- dom4j使用
- dom4j 使用
- DOM4J 使用
- Dom4J使用
- DOM4J使用
- Dom4j使用
- dom4j使用
- Dom4j使用
- Dom4j使用
- DOM4J使用
- dom4j使用
- dom4j使用
- Dom4j 使用
- 使用Dom4j
- dom4j 学习 -- 封装dom4j工具类+如何使用dom4j解析
- 找回快速启动栏里的显示桌面的图标
- DLL输出类使用研究手记(ZZ)
- wsif的localjava和simplesoap
- 这段sql语句的引号阿,整了半天 and requst对象
- 定时器代码分析
- Dom4j 使用心得
- Debugging Tools for Windows中Livekd的设置。
- 关于PK的N种解释
- 使用netfilter/iptables配置防火墙(ZT)
- jsp,db,apache中文乱码的解决方案
- 《伊甸樱桃》,原名《多数人死于贪婪》
- FGW 项目开发遇到问题
- 小店开张了
- Windows消息中的虚拟键