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的例子

Java代码
  1. import java.io.File;   
  2. import java.io.FileWriter;   
  3. import java.util.Iterator;   
  4. import java.util.List;   
  5.   
  6. import org.dom4j.Attribute;   
  7. import org.dom4j.Document;   
  8. import org.dom4j.DocumentHelper;   
  9. import org.dom4j.Element;   
  10. import org.dom4j.io.OutputFormat;   
  11. import org.dom4j.io.SAXReader;   
  12. import org.dom4j.io.XMLWriter;   
  13.   
  14. public class Createxml {   
  15.   
  16.     /**  
  17.      * 主要是用来创建XML文档并排版  
  18.      */  
  19.     public Createxml() {   
  20.     }   
  21.   
  22.     public int createXMLFile(String filename) {   
  23.         /** 返回操作结果,0 表失败,1 表成功 */  
  24.         int returnValue = 0;   
  25.         /** 建立document对象 */  
  26.         Document document = DocumentHelper.createDocument();   
  27.         /** 建立XML文档的根books */  
  28.         Element booksElement = document.addElement("books");   
  29.         /** 加入一行注释 */  
  30.         booksElement.addComment("This is a test for dom4j");   
  31.         /** 加入第一个book节点 */  
  32.         Element bookElement = booksElement.addElement("book");   
  33.         /** 加入show属性内容 */  
  34.         bookElement.addAttribute("show""yes");   
  35.         /** 加入title节点 */  
  36.         Element titleElement = bookElement.addElement("title");   
  37.         /** 为title设置内容 */  
  38.         titleElement.setText("Dom4j Tutorials");   
  39.   
  40.         /** 类似的完成后两个book */  
  41.   
  42.         bookElement = booksElement.addElement("book");   
  43.         bookElement.addAttribute("show""yes");   
  44.         titleElement = bookElement.addElement("title");   
  45.         titleElement.setText("Lucene Studing");   
  46.         bookElement = booksElement.addElement("book");   
  47.         bookElement.addAttribute("show""no");   
  48.         titleElement = bookElement.addElement("title");   
  49.         titleElement.setText("Lucene in Action");   
  50.   
  51.         /** 加入owner节点 */  
  52.   
  53.         Element ownerElement = booksElement.addElement("owner");   
  54.         ownerElement.setText("O'Reilly");   
  55.   
  56.         try {   
  57.             /** 将document中的内容写入文件中 */  
  58.             XMLWriter writer = new XMLWriter(new FileWriter(new File(filename)));   
  59.             writer.write(document);   
  60.             writer.close();   
  61.             /** 执行成功,需返回1 */  
  62.             returnValue = 1;   
  63.         } catch (Exception ex) {   
  64.             ex.printStackTrace();   
  65.         }   
  66.         return returnValue;   
  67.     }   
  68.   
  69.     /**  
  70.      * 该方法是修改XML文档  
  71.      */  
  72.     public int ModiXMLFile(String filename, String newfilename) {   
  73.   
  74.         int returnValue = 0;   
  75.         try {   
  76.             SAXReader saxReader = new SAXReader();   
  77.             Document document = saxReader.read(new File(filename));   
  78.   
  79.             /**  
  80.              * 修改内容之一: 如果book节点中show属性的内容为yes,则修改成no  
  81.              * 先用xpath查找对象   
  82.              */  
  83.   
  84.             List list = document.selectNodes("/books/book/@show");   
  85.             Iterator iter = list.iterator();   
  86.             while (iter.hasNext()) {   
  87.                 Attribute attribute = (Attribute) iter.next();   
  88.                 if (attribute.getValue().equals("yes")) {   
  89.                     attribute.setValue("no");   
  90.                 }   
  91.             }   
  92.             /**  
  93.              * 修改内容之二: 把owner项内容改为Tshinghua  
  94.              * 并在owner节点中加入date节点,date节点的内容为2004-09-11,还为date节点添加一个属性type  
  95.              */  
  96.   
  97.             list = document.selectNodes("/books/owner");   
  98.             iter = list.iterator();   
  99.             if (iter.hasNext()) {   
  100.                 Element ownerElement = (Element) iter.next();   
  101.                 ownerElement.setText("Tshinghua");   
  102.                 Element dateElement = ownerElement.addElement("date");   
  103.                 dateElement.setText("2004-09-11");   
  104.                 dateElement.addAttribute("type""Gregorian calendar");   
  105.             }   
  106.             /** 修改内容之三: 若title内容为Dom4jTutorials, 则删除该节点 */  
  107.             list = document.selectNodes("/books/book");   
  108.             iter = list.iterator();   
  109.             while (iter.hasNext()) {   
  110.                 Element bookElement = (Element) iter.next();   
  111.                 Iterator iterator = bookElement.elementIterator("title");   
  112.                 while (iterator.hasNext()) {   
  113.                     Element titleElement = (Element) iterator.next();   
  114.                     if (titleElement.getText().equals("Dom4j Tutorials")) {   
  115.                         bookElement.remove(titleElement);   
  116.                     }   
  117.                 }   
  118.             }   
  119.             try {   
  120.                 /** 将document中的内容写入文件中 */  
  121.                 XMLWriter writer = new XMLWriter(new FileWriter(new File(   
  122.                         newfilename)));   
  123.                 writer.write(document);   
  124.                 writer.close();   
  125.                 /** 执行成功,需返回1 */  
  126.                 returnValue = 1;   
  127.             } catch (Exception ex) {   
  128.                 ex.printStackTrace();   
  129.             }   
  130.         } catch (Exception ex) {   
  131.              ex.printStackTrace();   
  132.         }   
  133.         return returnValue;   
  134.     }   
  135.   
  136.     public int formatXMLFile(String filename) {   
  137.         int returnValue = 0;   
  138.         try {   
  139.             SAXReader saxReader = new SAXReader();   
  140.             Document document = saxReader.read(new File(filename));   
  141.             XMLWriter writer = null;   
  142.             /** 格式化输出,类型IE浏览一样 */  
  143.             OutputFormat format = OutputFormat.createPrettyPrint();   
  144.             /** 指定XML编码 */  
  145.             format.setEncoding("GBK");   
  146.             writer = new XMLWriter(new FileWriter(new File(filename)), format);   
  147.             writer.write(document);   
  148.             writer.close();   
  149.             /** 执行成功,需返回1 */  
  150.             returnValue = 1;   
  151.         } catch (Exception ex) {   
  152.             ex.printStackTrace();   
  153.         }   
  154.         return returnValue;   
  155.     }   
  156.   
  157.     public static void main(String[] args) {   
  158.         // TODO Auto-generated method stub   
  159.         Createxml temp = new Createxml();   
  160.         // 创建XML   
  161.         temp.createXMLFile("e://1//holen.xml");   
  162.         // 修改XML   
  163.         temp.ModiXMLFile("e://1//holen.xml""e://1//holen2.xml");   
  164.         // 排版XML   
  165.         temp.formatXMLFile("e://1//holen.xml");   
  166.         temp.formatXMLFile("e://1//holen2.xml");   
  167.     }   
  168. }  
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

Xml代码
  1. <books>  
  2.   <!--This is a test for dom4j, holen,2004.9.11-->  
  3.   <book show="no"/>  
  4.   <book show="no">  
  5.     <title>Lucene Studing</title>  
  6.   </book>  
  7.   <book show="no">  
  8.     <title>Lucene in Action</title>  
  9.   </book>  
  10.   <owner>Tshinghua   
  11.     <date type="Gregorian calendar">2004-09-11</date>  
  12.   </owner>  
  13. </books>  

http://xuexin0714.iteye.com/blog/486093

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值