package com.util;
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;
/**
* 使用dom4j对xml文件进行读写
*
* @author yaotengjiao
* @date 2011-8-5
*/
public class ReadXMLUseDom4j {
private static String xmlPath = "G:/123/测试.xml";
/**
* main测试方法
*
* @param args
* @throws IOException
* @throws DocumentException
*/
public static void main ( String[] args ) throws IOException, DocumentException {
//createXML ();//创建文件
readAndUpdateXML ();
}
/**
* 读取xml文件信息
* 修改其中的内容
* @throws DocumentException
* @throws IOException
*
*/
public static void readAndUpdateXML () throws DocumentException, IOException {
//注意此处没有做任何的判断,详细的判断可以另外添加
File xmlFile = new File ( xmlPath );
SAXReader saxReader = new SAXReader ();//创建xml文档的读写器对象
Document doc = saxReader.read ( xmlFile );//获得Document对象(可能会出现 org.xml.sax.SAXParseException: Invalid byte 2 of 2-byte UTF-8 sequence的错误,问题可以的解决方式:1、可以更改xml文件的编码格式GBK;2、XML文件保存为UTF-8)
List list = doc.selectNodes ( "//user/Username/@chineseName" );//获得属性的集合,也可以获得单独的一个节点
Iterator iter = list.iterator ();//遍历循环节点
while (iter.hasNext ()) {
Attribute attr = (Attribute) iter.next ();//修改属性的值
if (attr.getValue ().equals ( "" )) {
attr.setValue ( "哈哈,找到了但是公司的风格" );
}
}
Element e=doc.getRootElement ();
List<Element> lis1t=e.elements ();
for(Element er:lis1t){
System.out.println (er.getName ()+" ");
}
System.out.println (doc.getRootElement ().getName ());
//设置节点
List list1 = doc.selectNodes ( "//user/Username" );
Iterator iter1 = list1.iterator ();
while (iter1.hasNext ()) {
Element ele = (Element) iter1.next ();
ele.setText ( "1324654698" );
}
OutputFormat formate=OutputFormat.createPrettyPrint ();
formate.setEncoding ( "UTF-8" );
//修改文件
//XMLWriter writer = new XMLWriter ( new FileWriter ( xmlFile ) );
XMLWriter writer = new XMLWriter ( new FileWriter ( xmlPath ),formate );
writer.write ( doc );
writer.close ();
}
/**
* 向XML文件中添加信息
* @throws IOException
* 这个解析器可以从 http://dom4j.org 获取。
* 通过设置使 dom4j-1.4/dom4j-full.jar 能够在 classpath 中访问,
* 该文件中包括 dom4j 类、XPath 引擎以及 SAX 和 DOM 接口。
* 如果已经使用了 JAXP 解析器中包含的 SAX 和 DOM 接口,
* 向 classpath 中增加 dom4j-1.4/dom4j.jar 。
* dom4j.jar 包括 dom4j 类和 XPath 引擎,
* 但是不含 SAX 与 DOM 接口。
*
*/
public static void createXML () throws IOException {
//利用DocumentHelper来创建Document对象
Document doc = DocumentHelper.createDocument ();
//添加文档说明
//doc.addDocType ( "132", null, " hahha" );
//创建节点(这是添加根节点)
Element element = doc.addElement ( "user" );
//为节点添加注释
element.addComment ( "只是一个节点" );
//使用addprocessingInstruction()方法来增加一个处理命令
//element.addProcessingInstruction ( "target", "text" );
//添加节点元素
Element childrenElement = element.addElement ( "Username" );
childrenElement.addAttribute ( "chineseName", "卡哇伊" );
childrenElement.setText ( "猜猜我是谁" );//设置节点的文本值
//使用流来创建xml文件
XMLWriter writer = new XMLWriter ( new FileWriter ( new File ( xmlPath ) ) );
writer.write ( doc );
writer.close ();
}
}