使用dom4j对xml文件进行读写,以下代码经过测试,可以直接运行。
使用dom4j解析xml文件,要添加dom4j.jar架包
package com.zl.dom4j;
import java.io.File;
import java.io.FileOutputStream;
import java.util.Iterator;
import java.util.List;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.DOMReader;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
public class CreateXml {
public static void main(String[] args) {
CreateXml create = new CreateXml();
String path = "E:/skills.xml";
Document document = create.createxmlmethod();
create.printxmlmethod(document,path);
create.readxmlmethod();
}
@SuppressWarnings("unused")
public Document createxmlmethod() {
//创建document文档对象
Document document = DocumentHelper.createDocument();
//设置文档DocType,这里只是为了举例,添加hibernate的DocType
if(false){
document.addDocType("hibernate -configuration",
"-//Hibernate/Hibernate Configuration DTD 3.0//EN",
"http://hibernate.sourceforge.net/hibernate -configuration -3.0.dtd");
}
// 文档增加节点,即根节点,一个文档只能有一个根节点,多加出错
Element root = document.addElement("skills");
// 添加注释
root.addComment("第一个技能");
// 根节点下添加节点
Element first = root.addElement("skill");
// 节点添加属性
first.addAttribute("name", "独孤九剑");
// 节点下添加节点
Element info = first.addElement("info");
// 节点设置内容数据
info.setText("为独孤求败所创,变化万千,凌厉无比。其传人主要有风清扬、令狐冲。");
// 同理增加其他节点,内容,属性等
Element second = root.addElement("skill");
second.addAttribute("name", "葵花宝典");
Element info2 = second.addElement("info");
info2.setText("宦官所创,博大精深,而且凶险至极。练宝典功夫时,首先要自宫净身。");
/**
* 第二种方法增加节点,内容,属性等。先创建节点,属性,然后使用add 加入。
*/
// 创建节点
Element third = DocumentHelper.createElement("skill");
// 将节点加入到根节点中
root.add(third);
// 创建属性,第一个参数指定了拥有者,也可以为null,指定拥有者
Attribute name = DocumentHelper.createAttribute(third, "name", "北冥神功");
// 将属性加入到节点上
third.add(name);
// 创建子节点并加入到节点中
Element info3 = DocumentHelper.createElement("info");
info3.setText("逍遥派的顶级内功之一,能吸人内力转化为自己所有,威力无穷。");
third.add(info3);
return document;
}
public void printxmlmethod(Document doc,String path){
try {
// 创建格式化类
OutputFormat format = OutputFormat.createPrettyPrint();
// 设置编码格式,默认gb2312
format.setEncoding("gb2312");
// 创建输出流,此处要使用Writer,需要指定输入编码格式,使用OutputStream则不用
FileOutputStream fos = new FileOutputStream(path);
// 创建xml 输出流
XMLWriter writer = new XMLWriter(fos, format);
// 生成xml 文件
writer.write(doc);
writer.close();
} catch (Exception e) {
e.printStackTrace();
}
}
@SuppressWarnings("unused")
public void readxmlmethod(){
Document document=null;
if(true){
//使用SAXReader 解析
SAXReader reader = new SAXReader();
try {
document = reader.read( new File( "e:/skills.xml" ));
} catch (DocumentException e1) {
e1.printStackTrace();
}
}else{
//使用DOMReader 解析
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db;
try {
db = dbf.newDocumentBuilder();
File file = new File( "d:/skills.xml" );
org.w3c.dom.Document domDocument = db.parse(file);
DOMReader reader = new DOMReader();
document = reader.read(domDocument);
} catch (Exception e) {
e.printStackTrace();
}
}
//获取根节点
Element root = document.getRootElement();
@SuppressWarnings("rawtypes")
//获取根节点下的节点集合
List skills = root.elements();
//遍历根节点下的节点
for(Iterator> it = skills.iterator(); it.hasNext();) {
//获取根节点下的节点对象skill
Element e = (Element) it.next();
//获取skill节点的name属性。返回方式为:name="北冥神功"
Attribute attr1 = e.attribute("name");
//获取skill节点下的节点 info
Element info = e.element("info");
//获取info节点下的文本节点
String text = info.getText();
System.out.println("根节点:"+root.getName()+"||节点名称:"+e.getName()+"-name属性:"+attr1.getValue()+"||子节点:"+info.getName()+"||子节点内容:"+text);
}
}
}