使用dom4j 可以很快对xml 文档进行操作
需要导入的jiar包:
下面是一段对 配置文件操作的代码:
package unweb.xml;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Iterator;
/**
* Created by Administrator on 2016/8/17.
* 使用dom4j 操作xml 文件
*/
public class Dom4jTest {
private static Document doc = null; //文档对象
public static void main(String[] args) {
initXmlDocumentObject(); //初始化
Element ele = doc.getRootElement();
getAllXmlInfo(ele);
}
/*获取文档对象*/
public static void initXmlDocumentObject() {
try {
SAXReader saxReader = new SAXReader();
doc = saxReader.read("src/xmlTest.xml");
} catch (DocumentException e) {
e.printStackTrace();
}
}
/*获取根目录并且遍历根目录下的子元素*/
public static void rootTest() {
Element ele = doc.getRootElement(); //获取根元素
for (Iterator i = ele.elementIterator(); i.hasNext(); ) {
Element e = (Element) i.next(); //第一级子元素
System.out.println(e.getName() + ", " + e.attributeValue("name"));
for (Iterator j = e.elementIterator(); j.hasNext(); ) {
Element e2 = (Element) j.next(); //第二级子元素
System.out.println("\t" + e2.getText());
}
}
}
/*遍历整个 xml 文件*/
public static void getAllXmlInfo(Element ele){
for(Iterator i = ele.elementIterator(); i.hasNext(); ){
Element e1 = (Element) i.next();
System.out.println("名称:" + e1.getName() + ", name 属性:"+ e1.attributeValue("name"));
Iterator i1 = e1.elementIterator();
if(i1.hasNext()){ //如果元素存在子元素,则遍历其子元素
getAllXmlInfo(e1); //递归
}
}
}
/*添加元素*/
public static void addElement() {
Element ele = doc.getRootElement(); //获取根元素
Element e1 = ele.addElement("room4"); //创建子元素
ele.addAttribute("name", "room4"); //添加属性
Element e2 = e1.addElement("size"); //创建子元素
e2.addText("noExist"); //添加文本
}
/*修改属性*/
public static void updateElement() {
Element ele = doc.getRootElement(); //获取根元素
for (Iterator i = ele.elementIterator(); i.hasNext(); ) {
Element e1 = (Element) i.next();
if ("3".equals(e1.attributeValue("id"))) {
//e1.getParent().remove(e1); //删除子元素操作
e1.addAttribute("name", "after update");
}
}
}
/*保存xml*/
public static void saveXmlFile() {
String path = "src/newXml.xml";
OutputFormat of = OutputFormat.createCompactFormat();
of.setEncoding("utf-8"); //设置编码格式
XMLWriter xmlWriter = null;
try {
xmlWriter = new XMLWriter(new FileWriter(path), of);
xmlWriter.write(doc); //写入文件
xmlWriter.close(); //关闭流
} catch (IOException e) {
e.printStackTrace();
}
}
}
操作的xml 文件如下:
<?xml version="1.0" encoding="utf-8" ?>
<rooms>
<room id="1" name="room1">
<size name="size1">big</size>
<size name="size2">middle</size>
</room>
<room id="2" name="room2">
<size name="size1">big</size>
<size name="size2">middle</size>
</room>
<room id="3" name="room3">
<size name="size1">
<type name="type">double</type>
</size>
<size name="size2">small</size>
</room>
</rooms>
获取节点下的子元素也可以使用已下方法:
Element ele = doc.getRootElement();
for(Object e: ele.elements()){
Element e2 = (Element) e;
System.out.println(e2.getName());
}