利用DOM4J在java环境下读写xml文件的方法

在java环境下读取xml文件的方法主要有5种:DOM、SAX、JDOM、JAXB、dom4j,最常用、最好用的dom4j。

dom4j在xml解析方面是性能最好的,hibernate等框架都使用它作为解析的工具。   
要使用dom4j读写XML文档,需要先下载dom4j包,dom4j官方网站在 http://www.dom4j.org/ 目前最新dom4j包下载地址:

http://nchc.dl.sourceforge.net/sourceforge/dom4j/dom4j-1.6.1.zip  
解开后有两个包,仅操作XML文档的话把dom4j-1.6.1.jar加入工程就可以了,如果需要使用XPath的话还需要加入包jaxen-1.1-beta-7.jar 

在实际应用中需要遍历整个XML文档,可以利用访问者(Visitor)模式的应用。Visitor模式通常用于处理对象树结构,树中的每一个节点对象都可以接受一个Visitor对象,节点对象向Visitor传递自身,而Visitor反过来则调用节点对象的操作。
    在Visitor接口中,重载了所有节点访问的visit方法,例如:
        public void visit(Element node);
        public void visit(Attribute node);
        ......
    在Node接口中,定义了一个accept()方法,例如:
        public void accept(Visitor visitor);
    所以节点都是继承了accept()方法,在这个方法中,visitor.Visit(this),向visitor对象传递自身。而且,在dom4j中的Element的accept()方法采用递归操作实现了遍历节点的功能。
    此外,另一个类VisitorSupport类对Visitor接口空实现,可以继承此类,然后实现相应的方法就可以了。

Example:

XML:

<?xml version="1.0" encoding="GB2312"?>    
<?xml-stylesheet type="text/xsl" href="students.xsl"?> 
<students>   
    <student sn="01">   
        <name>张三</name> 
        <age>18</age> 
    </student>       
    <student sn="02">   
        <name>李四</name> 
        <age>20</age>  
    </student> 
</students>
Parse.java

import java.io.File;   
import org.dom4j.Attribute;
import org.dom4j.Document;   
import org.dom4j.DocumentException; 
import org.dom4j.Element;   
import org.dom4j.ProcessingInstruction;
import org.dom4j.VisitorSupport; 
import org.dom4j.io.SAXReader;
        public class Parse {
		public static void main(String[] args) {
			SAXReader reader = new SAXReader();//通过SAXReader从文件读取XML文档
			File file = new File("src/students.xml");
			try {   
                                   Document doc = reader.read(file);
                                   doc.accept(new MyVistor());//调用accept方法,接受一个访问者对象
			} catch (DocumentException e) {   
				 e.printStackTrace(); 
		 	} 
		} 
	public static class MyVistor extends VisitorSupport { 
		public void visit(Attribute node) {   //对于属性节点
			System.out.println("Attibute:---" + node.getName() + "="+ node.getValue()); 
		} 
		public void visit(Element node) { //对于元素节点,判断是否只包含文本内容,如是,则打印元素的名称和内容,如不是,则只打印元素的名字
 			if (node.isTextOnly()) {   
				System.out.println("Element:---" + node.getName() + "="+ node.getText());
			}else{   
				System.out.println("--------" + node.getName() + "-------");
			}
		} 
		@Override   
		public void visit(ProcessingInstruction node) { //对于处理指定节点,打印目标和数据
			System.out.println("PI:"+node.getTarget()+" "+node.getText());
		} 
	}
}

使用dom4j来将属性写入xml:

import java.io.FileWriter;
import java.io.IOException;
import org.dom4j.Document;   
import org.dom4j.DocumentHelper; 
import org.dom4j.Element;   
import org.dom4j.io.OutputFormat;
import org.dom4j.io.XMLWriter; 
public class DWriter {
	public static void main(String[] args) {
		try {   
			XMLWriter writer = new XMLWriter(new FileWriter("src/author.xml"));   
			Document doc = createDoc();
			writer.write(doc);
			writer.close(); 
			// Pretty print the document to System.out   
			// 设置了打印的格式,将读出到控制台的格式进行美化   
			OutputFormat format = OutputFormat.createPrettyPrint();
			writer = new XMLWriter(System.out, format);
			writer.write(doc);
			} catch (IOException e) {   
			e.printStackTrace();
			}
		} 
	public static Document createDoc() {   
		Document doc = DocumentHelper.createDocument();
		Element root = doc.addElement("root");   
		Element author1 = root.addElement("author").addAttribute("name","Kree").addAttribute("location", "UK").addText("Kree Strachan");
		Element author2 = root.addElement("author").addAttribute("name", "King").addAttribute("location", "US").addText("King McWrirter");
		return doc; 
	}
}

使用dom4j写入到author.xml文件的内容

<?xml version="1.0" encoding="UTF-8"?>
<root>   
<author name="Kree" location="UK">Kree Strachan</author>
<author name="King" location="US">King McWrirter</author>
</root> 









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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值