package com.lovo.xml.dom4j;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Iterator;
import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.Node;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
public class Test1 {
public Document read(String fileName) throws Exception {
SAXReader reader = new SAXReader();
// DOMReader reader = new DOMReader();
Document document = reader.read(new File(fileName));
return document;
}
/**
* 循环所有子节点
*/
public void printAll(Document doc) {
Element root = doc.getRootElement();
for (Iterator i = root.elementIterator(); i.hasNext();) {
Element ele = (Element) i.next();
System.out.print("no:" + ele.elementText("no"));
System.out.println(" addr:" + ele.elementText("addr"));
printAllAttribute(ele);
}
}
/**
* 循环指定名称子节点
*/
public void printAll(Document doc, String nodeName) {
Element root = doc.getRootElement();
Element ele;
for (Iterator i = root.elementIterator(nodeName); i.hasNext();) {
ele = (Element) i.next();
System.out.print("no:" + ele.elementText("no"));
System.out.println(" addr:" + ele.elementText("addr") );
printAllAttribute(ele);
}
}
/**
* 打印所有子节点
*/
public void printAllChildNode(Element element) {
for (int i = 0, size = element.nodeCount(); i < size; i++) {
Node node = element.node(i);
if (node instanceof Element) {
printAllChildNode((Element) node);// 递归
} else { // 其它处理
}
}
}
/**
* 打印节点的所有属性
*/
public void printAllAttribute(Element ele){
for ( Iterator i = ele.attributeIterator(); i.hasNext(); ) {
Attribute attribute = (Attribute) i.next();
System.out.println(attribute.getName()+" = "+attribute.getText());
}
}
public Document createDocument() {
Document doc = DocumentHelper.createDocument();
Element root = doc.addElement("root");
for (int i = 0; i < 3; i++) {
root.addElement("author" + i).addAttribute("age", "20" + i)
.addText("Mike");
}
return doc;
}
/**
* 保存
*/
public void saveXML(Document doc, String fileName) {
FileWriter out;
try {
out = new FileWriter(fileName);
doc.write(out);
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 保存(加入缓冲功能)
*/
public void saveXML2(Document doc, String fileName) {
FileWriter out;
BufferedWriter out2;
try {
out = new FileWriter(fileName);
out2 = new BufferedWriter(out);
doc.write(out2);
out2.close();
} catch (IOException e) {
e.printStackTrace();
}
}
public void formatXML(String oldFileName,String newFileName) throws Exception {
//创建格式对象
OutputFormat format = OutputFormat.createPrettyPrint();// createCompactFormat
format.setEncoding("GBK");//设置字符集
format.setIndentSize(4);//指定缩写尺寸
//创建输出文件流
FileWriter out = new FileWriter(newFileName);
//关键:按指定格式,将格式化的结果输出到out流
XMLWriter writer = new XMLWriter(out, format);
Document doc = this.read(oldFileName);
writer.write(doc);
out.close();
}
public static void main(String[] args) {
Test1 t1 = new Test1();
// try {
// Document doc = t1.read("em.xml");
// t1.printAll(doc);
//
// } catch (Exception e) {
// e.printStackTrace();
// }
Document doc = t1.createDocument();
// t1.saveXML(doc, "ok.xml");
try {
t1.formatXML("ok.xml","ok2.xml");
} catch (Exception e) {
e.printStackTrace();
}
}
}