1. 程式人生 > >使用Dom4j對XML文檔創建與解析

使用Dom4j對XML文檔創建與解析

body 設置 文檔 lazy write cat equal parse 進行

創建XML文件:

public class Dom4jCreateXml {

    public void testCreatXml() {
        //創建文檔對象
        Document document = DocumentHelper.createDocument();
        //創建跟節點
        Element root = document.addElement("students");
        //根據根節點創建子節點
        Element stu01 = root.addElement("student");
        
//添加student子節點id屬性 stu01.addAttribute("id", "001"); //根據student子節點創建name子節點 Element stu01Name = stu01.addElement("name"); //給子節點name添加文本 stu01Name.addText("zhangsan"); //根據stu01創建子節點age Element stu01Age = stu01.addElement("age"); //給子節點age添加文本 stu01Age.addText("23");
//設置輸出編碼格式 OutputFormat format = OutputFormat.createCompactFormat(); format.setEncoding("utf-8"); //輸出指定的xml文件 Writer out; try { out = new FileWriter("E://lazyli/test.xml"); //創建XML輸出對象,以指定的格式輸出 XMLWriter writer = new XMLWriter(out, format); writer.write(document); System.out.println(
"生成xml文件成功!"); out.close(); } catch (Exception e) { System.out.println("生成xml文件失敗!"); e.printStackTrace(); } } /** * 創建一個html格式的xml * <?xml version="1.0" encoding="UTF-8"?> * <Packet type="REQUEST" version="1.0"> * <Head> * <RequestID> AC00003900021456305194844</RequestID> * <RequestType>0002</RequestType> * <User>AC000039</User> * <Password>bc0TYXab4UjcZiOtX9XpdQ</Password> * </Head> * <Body> * …… * </Body> * </Packet> */ public void testCreatXml2() { //創建一個Document對象 Document document = DocumentHelper.createDocument(); //創建一個根節點 Element root = document.addElement("Packet"); //設置根節點屬性 root.addAttribute("type", "REQUEST"); root.addAttribute("version", "1.0"); //創建root的子節點head,body Element eleHead = root.addElement("head"); Element eleBody = root.addElement("body"); //處理子節點head,有三個子節點RequestType,User,Password,並添加各個的文本 Element eleRequestType = eleHead.addElement("RequestType"); eleRequestType.addText("AC00003900021456305194844"); Element eleUser = eleHead.addElement("User"); eleUser.addText("AC000039"); Element elePassword = eleHead.addElement("Password"); elePassword.addText("bc0TYXab4UjcZiOtX9XpdQ"); //處理子節點Body,添加子節點hello,文本world Element eleHello = eleBody.addElement("Hello"); eleHello.addText("world"); //指定文檔輸出編碼格式 OutputFormat format = OutputFormat.createCompactFormat(); format.setEncoding("utf-8"); Writer out; try { //創建一個文檔輸出流對象,向指定的文件中輸入 out = new FileWriter("E://lazyli/test02.xml"); //創建XMLWriter對象 XMLWriter writer = new XMLWriter(out, format); writer.write(document); System.out.println("成功生成xml文件!"); out.close(); writer.close(); } catch (Exception e) { e.printStackTrace(); } } public static void main(String[] args) { Dom4jCreateXml createXml = new Dom4jCreateXml(); // createXml.testCreatXml(); createXml.testCreatXml2(); } }

XML文件的解析

public class ParseXml01 {

    User user = new User();

    //遞歸遍歷xml文檔,獲取裏面的元素
    public void parseElement02(Element rootElement) {
        Element element;

        //使用叠代器遍歷根節點
        for (Iterator iterator = rootElement.elementIterator(); iterator.hasNext(); ) {
            //獲取根子節下面的節點
            element = (Element) iterator.next();
            //打印節點的名字和文本
            //System.out.println("當前節點:" + element.getName() + ",文本:" +element.getTextTrim());
            //將文件中的用戶信息提取出來
            if (element.getName().equals("User")) {
                if (element.getName() != null && element.getName() != "") {
                    user.setName(element.getTextTrim());
                }
            }
            if (element.getName().equals("Password")) {
                if (element.getName() != null && element.getName() != "") {
                    user.setPassword(element.getTextTrim());
                }
            }
            //判斷當前節點是否存在子節點,存在的話就繼續遍歷
            //得到節點類型,為1代表有子節點
            if (element.getNodeType() == Node.ELEMENT_NODE) {
                if (element.hasContent()) {
                    parseElement02(element);
                }
            }
        }
    }

    //解析
    public void parseXmlMethod(File file) throws Exception {
        //創建SAXReader解析對象
        SAXReader reader = new SAXReader();
        //根據SAXReader對象創建Document對象
        Document document = reader.read(file);
        //document對象得到根節點
        Element eleRoot = document.getRootElement();
        //打印root信息
        System.out.println("根元素:" + eleRoot.getName() + ",屬性:");
        //調用遞歸方法進行解析節點信息
        parseElement02(eleRoot);
    }

    //打印用戶信息
    public void userInfo() throws Exception {
        //調用解析方法,解析文件,輸出文件中的用戶信息
        parseXmlMethod(new File("E://lazyli/test02.xml"));
        System.out.println("用戶名:" + user.getName() + ",密碼:" + user.getPassword());
    }

    public static void main(String[] args) throws Exception {
        ParseXml01 parseXml01 = new ParseXml01();
        parseXml01.userInfo();

    }

}

使用Dom4j對XML文檔創建與解析