这里有个XML文件如下图所示,看下dom4j如何创建、解析、修改操作它。
package dom4j;
import java.io.File;
import java.io.FileWriter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
public class XMLUtil {
/**
* 创建XML文件
* @param filePath 文件完整路径(带文件名)
*/
public static void createXML(String filePath) {
// 创建一个完整的document,包含根节点与子节点
Document document = DocumentHelper.createDocument();
Element root = document.addElement("root");
root.addElement("totalRecords").addText("999");
root.addElement("pagesize").addText("4");
root.addElement("currpage").addText("1");
Element hotelList = root.addElement("hotelList");
hotelList.addElement("hotel").addAttribute("hotelName", "七天连锁酒店").addAttribute("address", "长安街001号");
hotelList.addElement("hotel").addAttribute("hotelName", "如家连锁酒店").addAttribute("address", "长安街002号");
hotelList.addElement("hotel").addAttribute("hotelName", "汉庭连锁酒店").addAttribute("address", "长安街003号");
hotelList.addElement("hotel").addAttribute("hotelName", "希尔顿连锁酒店").addAttribute("address", "长安街004号");
// 将document输出到文件
try {
XMLWriter writer = null;
OutputFormat format = OutputFormat.createPrettyPrint(); // 美化输出格式
format.setEncoding("UTF-8");
writer= new XMLWriter(new FileWriter(new File(filePath)),format);
writer.write(document);
writer.close();
} catch(Exception ex) {
ex.printStackTrace();
}
}
/**
* 创建XML文件
* @param content 写入的内容
* @param filePath 文件完整路径(带文件名)
*/
public static void createXML(String content, String filePath) {
try {
// 将字符串转化成document
Document document = DocumentHelper.parseText(content);
// 将document输出到文件
XMLWriter writer = null;
OutputFormat format = OutputFormat.createPrettyPrint(); // 美化输出格式
format.setEncoding("UTF-8");
writer= new XMLWriter(new FileWriter(new File(filePath)),format);
writer.write(document);
writer.close();
} catch(Exception ex) {
ex.printStackTrace();
}
}
/**
* 将XML文件转化成字符串
* @param filePath 文件完整路径(带文件名)
* @return
*/
public static String xmlToString(String filePath) {
String content = "";
try {
SAXReader saxReader = new SAXReader();
Document document = saxReader.read(new File(filePath));
content = document.asXML();
} catch(Exception ex) {
ex.printStackTrace();
}
return content;
}
/**
* 解析XML文件
* @param filePath 文件完整路径(带文件名)
* @return
*/
public static void praseXML(String filePath) {
int totalRecords = 0; // 酒店总数
int pagesize = 0; // 每页返回最大结果数
int currpage = 0; // 当前页数
List<Map<String, Object>> hotelMapList = new ArrayList<Map<String, Object>>();
Map<String, Object> map = null;
try {
SAXReader saxReader = new SAXReader();
Document document = saxReader.read(new File(filePath));
Element root = document.getRootElement();
totalRecords = Integer.parseInt(root.element("totalRecords").getText());
pagesize = Integer.parseInt(root.element("pagesize").getText());
currpage = Integer.parseInt(root.element("currpage").getText());
Element hotelListElement = root.element("hotelList");
Iterator it = hotelListElement.elementIterator("hotel");
String hotelName = "";
String address = "";
while(it.hasNext()) {
Element types = (Element) it.next();
hotelName = types.attributeValue("hotelName");
address = types.attributeValue("address");
map = new HashMap<String, Object>();
map.put("hotelName", hotelName);
map.put("address", address);
hotelMapList.add(map);
}
} catch(Exception e) {
e.printStackTrace();
}
}
/**
* 修改XML文件,将每次返回4个酒店改为每次返回5个酒店
* @param filePath 文件完整路径(带文件名)
*/
public static void modifyXML(String filePath) {
try {
SAXReader saxReader = new SAXReader();
Document document = saxReader.read(new File(filePath));
Element root = document.getRootElement();
root.element("pagesize").setText("5");
Element hotelListElement = root.element("hotelList");
hotelListElement.addElement("hotel").addAttribute("hotelName", "维多利亚连锁酒店").addAttribute("address", "长安街005号");
// 将修改后的document输出到文件
XMLWriter writer = null;
OutputFormat format = OutputFormat.createPrettyPrint(); // 美化输出格式
format.setEncoding("UTF-8");
writer= new XMLWriter(new FileWriter(new File(filePath)),format);
writer.write(document);
writer.close();
} catch(Exception e) {
e.printStackTrace();
}
}
}