import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.Iterator;
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;
publicclass operateXML {
/**
* 解析XML
* @param fileName XMl名称
*/
publicvoid parseXml(String fileName){
//1.构建解析器SAXReader
SAXReader reader = new SAXReader();
Document doc =null;//声明document转换器
try {
//2.将XML文件转换成document对象reader.read(filename);
doc = reader.read(fileName);
} catch (DocumentException e) {
e.printStackTrace();
}
//3.获得根元素getRootElement()
Element root = doc.getRootElement();
//4.遍历元素集合root.elementIterator()
//Iterator<Element> iter= root.elementIterator();
for (Iterator<Element> iter = root.elementIterator();iter.hasNext();){
Element element = iter.next();
String fruit = element.attributeValue("fruit");//获取子元素标签
String name = element.elementText("name");//获取name属性的值
String color = element.elementText("color");//获取color属性的值
//答应输出信息
System.out.println("节点:"+fruit);
System.out.println("name:"+name);
System.out.println("color:"+color);
System.out.println("---------------------");
}
}
/**
* 生成XML
* @param filename xml文件名
*/
publicvoid createXML(String filename){
//1. 使用DocumentHelper.createDocument()构建一个 dom4j的document对象
Document doc = DocumentHelper.createDocument();
//2.从根节点开始构建节点和树形结构
Element root = doc.addElement("fruits");
Element fruit1=root.addElement("fruit");
fruit1.addAttribute("fruitNo","1");//设置属性
fruit1.addElement("name").addText("苹果");
fruit1.addElement("color").addText("红色");
Element fruit2=root.addElement("fruit");
fruit2.addAttribute("fruitNo","2");//设置属性
fruit2.addElement("name").addText("橙子");
fruit2.addElement("color").addText("橙色");
//3.设置格式OutputFormat
OutputFormat format = OutputFormat.createCompactFormat();
format.setEncoding("UTF-8");
//4.实例化一个XMLWriter输出对象,打开输出流
XMLWriter out= null;
try {
out = new XMLWriter(new FileOutputStream(filename),format);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
}
//5. 将document对象输出到xml文件out.write(doc);
try {
out.write(doc);
} catch (IOException e) {
e.printStackTrace();
}finally{
//6.关闭输出流out.close();
try {
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
/**
* 修改XML
* @param filename xml名称
*/
publicvoid modifyXML(String filename){
//构建解析器SAXReader
SAXReader reader = new SAXReader();
Document doc =null;//声明document转换器
try {
//2.将XML文件转换成document对象reader.read(filename);
doc = reader.read(filename);
} catch (DocumentException e) {
e.printStackTrace();
}
//3.获得根元素getRootElement()
Element root = doc.getRootElement();
//4.遍历元素集合root.elementIterator()
for(Iterator<Element> iter = root.elementIterator();iter.hasNext();){
Element fruit = iter.next();
//5.修改文本内容或属性值
if(fruit.elementText("name").equals("苹果")){
//fruit.selectSingleNode("color").setText("青色");
//Element name =fruit.getChild("name");
//name.setText("苹果");
fruit.element("color").setText("青色");
fruit.remove(fruit.attribute("fruitNo"));
}
}
//6.设置格式OutputFormat
OutputFormat format = OutputFormat.createCompactFormat();
format.setEncoding("UTF-8");
//7.实例化一个XMLWriter输出对象,打开输出流
XMLWriter out = null;
try {
out = new XMLWriter(new FileOutputStream(filename),format);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
}
//8. 将document对象输出到xml文件out.write(doc);
try {
out.write(doc);
} catch (IOException e) {
e.printStackTrace();
}finally{
//9.关闭输出流out.close();
try {
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
publicstaticvoid main(String[] args) {
//实例化操作xml对象
operateXML op = new operateXML();
//解析XML
op.parseXml("fruit.xml");
//创建XML
op.createXML("fruits.xml");
//修改XML
op.modifyXML("fruit.xml");
//解析XML
op.parseXml("fruit.xml");
}
}