Dom4j学习笔记

原创 2013年12月04日 09:57:12

下面的代码是在网上查找的,然后自己对照别人的在本地运行了一下,觉得很不错,所以就发布出来,版权不归本人

 

附件中有我运行的工程,可以直接测试

 

package hb.java;

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 Dom4jDemo {
	
	/*
	 * 建立一个xml文件,文件的名称由输入参数决定
	 * @param filename 需要建立的文件名
	 * @return 返回操作结果,0表示失败,1表示成功
	 */
	public int createXMLFile(String filename){
		
		int returnValue = 0;
		//创建一个Document对象,即根节点
		Document doc = DocumentHelper.createDocument();
		doc.addComment("comment 1");
		//在doc元素下面添加一个Element对象
		Element booksElement = doc.addElement("books");
		//在booksElement节点下面添加一个Element对象
		Element bookElement = booksElement.addElement("book");
		//给bookElement节点添加一个属性show=yes
		bookElement.addAttribute("show", "yes");
		//给bookElement对象下面添加一个Element对象
		Element titleElement = bookElement.addElement("title");
		//titleElement对象的文本节点的值为Dom4j Tutorials
		titleElement.setText("Dom4j Tutorials");
		
		bookElement = booksElement.addElement("book");
		bookElement.addAttribute("show", "yes");
		titleElement = bookElement.addElement("title");
		titleElement.setText("Lucene Studing");
		
		bookElement = booksElement.addElement("book");
		bookElement.addAttribute("show", "no");
		titleElement = bookElement.addElement("title");
		titleElement.setText("Lucene in action");
		booksElement.addComment("i am booksElement's commons");
		Element ownerElement = booksElement.addElement("owner");
		ownerElement.setText("huangbiao");
		
		try{
		//创建一个XMLWriter对象,封装了对Document写的操作
			XMLWriter writer = new XMLWriter(new FileWriter(new File(filename)));
			writer.write(doc);
			//关闭数据流
			writer.close();
			returnValue = 1;
		}catch(Exception e){
			e.printStackTrace();
		}
		
		return returnValue;
	}
	
	
	/*
	 * 修改xml文件中的内容,并另存为一个新文件
	 * @param filename修改对象文件
	 * @param newfilename 修改后另存为该文件
	 * @return 返回操作结果,0表示失败,1表示成功
	 */
	public int modifyXMLFile(String filename,String newfilename){
		int returnValue = 0;
		try {
			SAXReader saxReader = new SAXReader();
			Document doc = saxReader.read(new File(filename));
			//使用下面的方法一定要引用jaxen.jar包,否则页面会抛异常,查询book元素属性为show的结果集合
			List list = doc.selectNodes("/books/book/@show");
			Iterator it = list.iterator();
			while(it.hasNext()){
				Attribute attr = (Attribute)it.next();
				if(attr.getValue().equals("yes")){
					attr.setValue("no");
				}
			}
			
			/*
			 * 把owner项内容改为Tshinghua,并在owner节点中加入date节点,
				内容为2004-9-11,还为date节点添加一个参数type
			 */
			//查询books元素的子元素owner的节点
			list = doc.selectNodes("/books/owner");
			it = list.iterator();
			if(it.hasNext()){
				Element ownerElement = (Element)it.next();
				ownerElement.setText("Tshinghua");
				Element dateElement = ownerElement.addElement("date");
				dateElement.setText("2004-9-11");
				dateElement.addAttribute("type", "huangbiao");
			}
			
			/** 修改内容之三: 若title内容为Dom4j Tutorials,则删除该节点 */
			list = doc.selectNodes("books/book");
			it = list.iterator();
			while(it.hasNext()){
				Element bookElement = (Element)it.next();
				Iterator iterator = bookElement.elementIterator("title");
				while(iterator.hasNext()){
					Element titleElement = (Element)iterator.next();
					if(titleElement.getText().equals("Dom4j Tutorials")){
						bookElement.remove(titleElement);
					}
				}
			}
			
			try{
				XMLWriter w = new XMLWriter(new FileWriter(new File(newfilename)));
				w.write(doc);
				w.close();
				returnValue = 1;
			}catch (Exception e) {
				// TODO: handle exception
			}
			
			
		} catch (DocumentException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return returnValue;
	}
	
	/*
	 * xml文件格式化的问题
	 */
	public int formatXMLFile(String filename){
		int returnValue = 0;
		try {
			SAXReader saxReader = new SAXReader();
			Document doc = saxReader.read(new File(filename));
			XMLWriter output = null;
			OutputFormat format = OutputFormat.createPrettyPrint();
			format.setEncoding("utf-8");
			output = new XMLWriter(new FileWriter(new File(filename)),format);
			output.write(doc);
			output.close();
			returnValue = 1;
		} catch (DocumentException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return returnValue;
	}
	
}

 

 

package hb.java;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Iterator;

import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.stream.StreamSource;

import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;

import org.dom4j.DocumentException;

import org.dom4j.io.DocumentResult;
import org.dom4j.io.DocumentSource;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;

public class Foo {

	public Document parse(File file) throws DocumentException {

		// 以DOM4J默认的SAX解析器解析

		SAXReader reader = new SAXReader();

		// read函数的形参可以是url 也可以是 File类型,也可以是STRING类型的相对或绝对路径

		Document document = reader.read(file);

		return document;

	}

	public void bar(Document document) throws DocumentException {

		// 获得根节点

		Element root = document.getRootElement();

		// i为根节点孩子节点的迭代器

		for (Iterator i = root.elementIterator(); i.hasNext();) {

			Element element = (Element) i.next();

			// do something

			System.out.println(element.getName());

		}

		// 名为“student1”节点以下孩子节点的迭代器

		for (Iterator i = root.elementIterator("student1"); i.hasNext();) {

			Element foo = (Element) i.next();

			// do something

			System.out.println(foo.getText());

		}

		// 根节点属性的迭代器

		for (Iterator i = root.attributeIterator(); i.hasNext();) {

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

			// do something

			System.out.println(attribute.getValue());

		}

	}
	
	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;
    }
	
	public void write(Document document) throws IOException {
		 
        // lets write to a file
        XMLWriter writer = new XMLWriter(
            new FileWriter( "output.xml" )
        );
        writer.write( document );
        writer.close();
 
        // 打印出Pretty的样式。即元素之间有换行。
        OutputFormat format = OutputFormat.createPrettyPrint();
        writer = new XMLWriter( System.out, format );
        writer.write( document );
 
        // 紧凑的格式,所有元素在一行
        format = OutputFormat.createCompactFormat();
        writer = new XMLWriter( System.out, format );
        writer.write( document );
    }

	public Document styleDocument(Document document, String stylesheet) throws Exception {

		// load the transformer using JAXP

		TransformerFactory factory = TransformerFactory.newInstance();

		Transformer transformer = factory.newTransformer(

				new StreamSource(stylesheet)

		);

		// now lets style the given document

		DocumentSource source = new DocumentSource(document);

		DocumentResult result = new DocumentResult();

		transformer.transform(source, result);

		// return the transformed document

		Document transformedDoc = result.getDocument();

		return transformedDoc;

	}


}

 

简单说明dom4j的使用流程和常用方法

要使用dom4j读写XML文档,需要先下载dom4j包,dom4j官方网站在 http://www.dom4j.org/ 目前最新dom4j包下载地址:http://nchc.dl.sourcefo...
  • Hujingzheng
  • Hujingzheng
  • 2016年06月23日 15:37
  • 509

使用Dom4j解析XML

dom4j是一个Java的XML API,类似于jdom,用来读写XML文件的。dom4j是一个非常非常优秀的Java XML API,具有性能优异、功能强大和极端易用使用的特点,同时它也是一个开放源...
  • redarmy_chen
  • redarmy_chen
  • 2013年10月23日 12:06
  • 280887

dom4j 最常用最简单的用法

要使用dom4j读写XML文档,需要先下载dom4j包,dom4j官方网站在 http://www.dom4j.org/ 目前最新dom4j包下载地址:http://nchc.dl.sourcefo...
  • jiutianhe
  • jiutianhe
  • 2014年10月28日 16:54
  • 4060

dom4j实例 带注释

记得导包  路径:http://download.csdn.net/detail/u010310183/8078033 package test; import java.io.File; imp...
  • u010310183
  • u010310183
  • 2015年03月30日 10:03
  • 657

Dom4j使用简介

Dom4j使用简介
  • u010375364
  • u010375364
  • 2016年07月21日 22:37
  • 642

dom4j保存信息到XML文件

首先现将dom4j组件所用的包导入项目中,导入方法上篇文章已讲过。 1.在jsp文件中编写一个表单。为了保证信息的完整性,在用户提交表单时需要判断输入的标题和内容是否为空,这个方法由JavaScri...
  • WYFVV
  • WYFVV
  • 2017年06月10日 21:02
  • 506

Dom4jUtil工具类

package org.noures.framework.modules.util.dom4j; import java.io.File; import java.io.FileWriter; im...
  • HUXU981598436
  • HUXU981598436
  • 2013年11月14日 00:24
  • 1216

Dom4j的使用(全而好的文章)

DOM4J是dom4j.org出品的一个开源XML解析包,它的网站中这样定义:Dom4j is an easy to use, open source library for working with...
  • a4986
  • a4986
  • 2017年05月15日 23:15
  • 294

spring的第一天——dom4j的使用,properties的打印

1、Spring是什么 Spring是一个开源的控制反转(Inversion of Control ,IoC)和面向切面(AOP)的容器框架.它的主要目的是简化企业开发. IOC翻转: public...
  • danny1991
  • danny1991
  • 2015年12月21日 14:47
  • 888

xml解析-dom4j对XPATH的支持

用dom4j对xml进行解析已经比sax方式简洁了很多,用起来很方便,但是在获取某个元素时依然有点麻烦,要一层一层的获取,这样很麻烦,换好dom4j提供了对XPATH的支持,这里简单介绍一下。 以下...
  • u013189927
  • u013189927
  • 2016年05月07日 17:08
  • 2699
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Dom4j学习笔记
举报原因:
原因补充:

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