package TEST;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.nio.charset.Charset;
import java.util.List;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
public class Dom4j implements XMLDocument{
public static void main(String[] args) {
XMLDocument doc = new Dom4j(); //創(chuàng)建dom4j對(duì)象
// doc.creatXml("a.xml"); //調(diào)用creatXml()方法盒让,將內(nèi)容寫(xiě)到a.xml文件中
doc.parseXml("a.xml"); //調(diào)用parseXml解析方法贴见,解析a.xml文件
}
public void creatXml(String filename) {
Document document = DocumentHelper.createDocument(); //創(chuàng)建xml文檔招拙,并加上頭部
Element users = document.addElement("users"); //添加根節(jié)點(diǎn)users
Element user = users.addElement("user"); //在根節(jié)點(diǎn)下添加二級(jí)節(jié)點(diǎn)user
Element name = user.addElement("name"); //在二級(jí)節(jié)點(diǎn)user下添加三級(jí)節(jié)點(diǎn)name
name.setText("張三"); //在三級(jí)節(jié)點(diǎn)name中加上內(nèi)容
user.addElement("age").setText("12"); //添加三級(jí)節(jié)點(diǎn)age坚俗,并加上內(nèi)容
user.addElement("sex").setText("男"); //添加三級(jí)節(jié)點(diǎn)sex,并機(jī)上內(nèi)容
user.addAttribute("id","001"); //給user添加id屬性
System.out.println(document.asXML()); //打印xml文檔
Writer writer;
try {
// writer = new FileWriter(filename);
// XMLWriter xmlwriter = new XMLWriter(writer);
//包裝流吗浩,創(chuàng)建字節(jié)輸出流(utf-8格式,没隘,解決字符集不匹配問(wèn)題)懂扼,再將字節(jié)輸出流轉(zhuǎn)成字符輸出流
OutputStreamWriter ow = new OutputStreamWriter(new FileOutputStream(filename),Charset.forName("UTF-8"));
XMLWriter xmlwriter = new XMLWriter(ow); //創(chuàng)建XML文檔寫(xiě)入流
xmlwriter.write(document); //寫(xiě)入對(duì)象
xmlwriter.close(); //關(guān)閉流
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Override
public void parseXml(String filename) {
SAXReader reader = new SAXReader();
Document document;
try {
document = reader.read(new FileInputStream(filename));
Element root = document.getRootElement(); //得到xml文檔的根節(jié)點(diǎn)
List<Element> elements = root.elements(); //得到根節(jié)點(diǎn)下的節(jié)點(diǎn)集合
System.out.println("根節(jié)點(diǎn)下的節(jié)點(diǎn)總個(gè)數(shù)為:" + elements.size());
for (Element e : elements) { //輸出根節(jié)點(diǎn)下的每個(gè)節(jié)點(diǎn)
System.out.println(e.getName());
e.elements().forEach((child)->{
Element c = (Element) child;
System.out.println("\t" + c.getName() + " : " + c.getText()); //輸出根節(jié)點(diǎn)下的每個(gè)根節(jié)點(diǎn)和里面的內(nèi)容
});
}
} catch (FileNotFoundException | DocumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}