解析XML過程是通過擷取Document對象,然後繼續擷取各個節點以及屬性等操作,是以擷取Document對象是第一步,使用SAXReader、SAXWriter建立和讀取xml
public class Dom4jDemo {
public static void main(String[] args) {
createXml();
readXml();
}
/**
* 讀取XML檔案
*/
private static void readXml() {
SAXReader reader = new SAXReader();
try {
Map<String, Object> respMap = new HashMap<String, Object>();
Document document = reader.read(new File("students.xml"));
Map<String,Object> map = parseElement(document.getRootElement());
System.out.println(new Gson().toJson(map));
} catch (DocumentException e) {
e.printStackTrace();
} catch (MalformedURLException e) {
e.printStackTrace();
}
}
/**
* 将XML檔案内容轉換為Map對象
* @param rootElement
* @return
*/
private static Map<String, Object> parseElement(Element rootElement) {
Map<String, Object> map = new HashMap<String, Object>();
Iterator<Element> it = rootElement.elementIterator();
while (it.hasNext()){
Element element = it.next();
if (element.elementIterator().hasNext()){
map.put(element.getName(),parseElement(element));
}else {
map.put(element.getName(),element.getTextTrim());
}
}
return map;
}
/**
* 建立XML檔案
*/
private static void createXml() {
Document document = DocumentHelper.createDocument();
Element root = document.addElement("students");
Element oneChildElement = root.addElement("student");
oneChildElement.addElement("name").addText("huchx");
oneChildElement.addElement("url").addText("www.baidu.com");
Element twoChildElement = root.addElement("student1");
twoChildElement.addElement("name").addText("王金");
twoChildElement.addElement("url").addText("www.google.com");
//自定義樣式
OutputFormat format = new OutputFormat();
format.setIndentSize(2);//行縮進
format.setNewlines(true);//一個節點為一行
format.setTrimText(true);//去除空格
format.setPadText(true);
try {
XMLWriter writer = new XMLWriter(new FileOutputStream(new File("students.xml")), format);
writer.write(document);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
讀取操作結果顯示為: