用Dom4j 解析XML

1.下载与安装
dom4j 是sourceforge.net 上的一个开源项目,主要用于对XML 的解析。从2001 年7 月发布第一版以来,已陆续推出多个版本,目前最高版本为1.5。dom4j 专门针对Java 开发,使用起来非常简单、直观,在Java 界,dom4j 正迅速普及。可以到http://sourceforge.net/projects/dom4j 下载其最新版。dom4j1.5 的完整版大约13M,是一个名为dom4j-1.5.zip 的压缩包,解压后有一个dom4j-1.5.jar 文件,这就是应用时需要引入的类包,另外还有一个jaxen-1.1-beta-4.jar 文件,一般也需要引入,否则执行时可能抛java.lang.NoClassDefFoundError: org/jaxen/JaxenException 异常,其他的包可以选择用之

2.一个创建XML、修改XML 和排版XML的例子

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

import org.dom4j.Attribute;
import org.dom4j.Document;
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 Createxml {

	/**
	 * 主要是用来创建XML文档并排版
	 */
	public Createxml() {
	}

	public int createXMLFile(String filename) {
		/** 返回操作结果,0 表失败,1 表成功 */
		int returnValue = 0;
		/** 建立document对象 */
		Document document = DocumentHelper.createDocument();
		/** 建立XML文档的根books */
		Element booksElement = document.addElement("books");
		/** 加入一行注释 */
		booksElement.addComment("This is a test for dom4j");
		/** 加入第一个book节点 */
		Element bookElement = booksElement.addElement("book");
		/** 加入show属性内容 */
		bookElement.addAttribute("show", "yes");
		/** 加入title节点 */
		Element titleElement = bookElement.addElement("title");
		/** 为title设置内容 */
		titleElement.setText("Dom4j Tutorials");

		/** 类似的完成后两个book */

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

		/** 加入owner节点 */

		Element ownerElement = booksElement.addElement("owner");
		ownerElement.setText("O'Reilly");

		try {
			/** 将document中的内容写入文件中 */
			XMLWriter writer = new XMLWriter(new FileWriter(new File(filename)));
			writer.write(document);
			writer.close();
			/** 执行成功,需返回1 */
			returnValue = 1;
		} catch (Exception ex) {
			ex.printStackTrace();
		}
		return returnValue;
	}

	/**
	 * 该方法是修改XML文档
	 */
	public int ModiXMLFile(String filename, String newfilename) {

		int returnValue = 0;
		try {
			SAXReader saxReader = new SAXReader();
			Document document = saxReader.read(new File(filename));

			/**
			 * 修改内容之一: 如果book节点中show属性的内容为yes,则修改成no
			 * 先用xpath查找对象 
			 */

			List list = document.selectNodes("/books/book/@show");
			Iterator iter = list.iterator();
			while (iter.hasNext()) {
				Attribute attribute = (Attribute) iter.next();
				if (attribute.getValue().equals("yes")) {
					attribute.setValue("no");
				}
			}
			/**
			 * 修改内容之二: 把owner项内容改为Tshinghua
			 * 并在owner节点中加入date节点,date节点的内容为2004-09-11,还为date节点添加一个属性type
			 */

			list = document.selectNodes("/books/owner");
			iter = list.iterator();
			if (iter.hasNext()) {
				Element ownerElement = (Element) iter.next();
				ownerElement.setText("Tshinghua");
				Element dateElement = ownerElement.addElement("date");
				dateElement.setText("2004-09-11");
				dateElement.addAttribute("type", "Gregorian calendar");
			}
			/** 修改内容之三: 若title内容为Dom4jTutorials, 则删除该节点 */
			list = document.selectNodes("/books/book");
			iter = list.iterator();
			while (iter.hasNext()) {
				Element bookElement = (Element) iter.next();
				Iterator iterator = bookElement.elementIterator("title");
				while (iterator.hasNext()) {
					Element titleElement = (Element) iterator.next();
					if (titleElement.getText().equals("Dom4j Tutorials")) {
						bookElement.remove(titleElement);
					}
				}
			}
			try {
				/** 将document中的内容写入文件中 */
				XMLWriter writer = new XMLWriter(new FileWriter(new File(
						newfilename)));
				writer.write(document);
				writer.close();
				/** 执行成功,需返回1 */
				returnValue = 1;
			} catch (Exception ex) {
				ex.printStackTrace();
			}
		} catch (Exception ex) {
			 ex.printStackTrace();
		}
		return returnValue;
	}

	public int formatXMLFile(String filename) {
		int returnValue = 0;
		try {
			SAXReader saxReader = new SAXReader();
			Document document = saxReader.read(new File(filename));
			XMLWriter writer = null;
			/** 格式化输出,类型IE浏览一样 */
			OutputFormat format = OutputFormat.createPrettyPrint();
			/** 指定XML编码 */
			format.setEncoding("GBK");
			writer = new XMLWriter(new FileWriter(new File(filename)), format);
			writer.write(document);
			writer.close();
			/** 执行成功,需返回1 */
			returnValue = 1;
		} catch (Exception ex) {
			ex.printStackTrace();
		}
		return returnValue;
	}

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Createxml temp = new Createxml();
		// 创建XML
		temp.createXMLFile("e://1//holen.xml");
		// 修改XML
		temp.ModiXMLFile("e://1//holen.xml", "e://1//holen2.xml");
		// 排版XML
		temp.formatXMLFile("e://1//holen.xml");
		temp.formatXMLFile("e://1//holen2.xml");
	}
}

  3.实现的XML

<books>
  <!--This is a test for dom4j, holen,2004.9.11-->
  <book show="no"/>
  <book show="no">
    <title>Lucene Studing</title>
  </book>
  <book show="no">
    <title>Lucene in Action</title>
  </book>
  <owner>Tshinghua
    <date type="Gregorian calendar">2004-09-11</date>
  </owner>
</books>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值