import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.util.Iterator; import org.dom4j.Attribute; 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; /** * * dom4j生成與解析XML文檔 * */ public classDom4jDemo { /** * 利用dom4j進(jìn)行xml文檔的寫入操作 */ public void createXml(File file) { // XML 聲明 <?xmlversion="1.0" encoding="UTF⑻"?> 自動添加到 XML文檔中 // 使用DocumentHelper類創(chuàng)建文檔實例(生成 XML文檔節(jié)點的 dom4jAPI工廠類) Document document =DocumentHelper.createDocument(); // 使用addElement()方法創(chuàng)建根元素employees(用于向 XML 文檔中增加元素) Element root =document.addElement("employees"); // 在根元素中使用 addComment()方法添加注釋"AnXML Note" root.addComment("An XMLNote"); // 在根元素中使用addProcessingInstruction()方法增加1個處理指令 root.addProcessingInstruction("target","text"); // 在根元素中使用 addElement()方法增加employee元素。 Element empElem =root.addElement("employee"); // 使用 addAttribute()方法向employee元素添加id和name屬性 empElem.addAttribute("id","0001"); empElem.addAttribute("name","wanglp"); // 向employee元素中添加sex元素 Element sexElem =empElem.addElement("sex"); // 使用setText()方法設(shè)置sex元素的文本 sexElem.setText("m"); // 在employee元素中增加age元素 并設(shè)置該元素的文本。 Element ageElem =empElem.addElement("age"); ageElem.setText("25"); // 在根元素中使用 addElement()方法增加employee元素。 Element emp2Elem =root.addElement("employee"); // 使用 addAttribute()方法向employee元素添加id和name屬性 emp2Elem.addAttribute("id","0002"); emp2Elem.addAttribute("name","fox"); // 向employee元素中添加sex元素 Element sex2Elem =emp2Elem.addElement("sex"); // 使用setText()方法設(shè)置sex元素的文本 sex2Elem.setText("f"); // 在employee元素中增加age元素 并設(shè)置該元素的文本。 Element age2Elem =emp2Elem.addElement("age"); age2Elem.setText("24"); // 可使用 addDocType()方法添加文檔類型說明。 //document.addDocType("employees", null,"file://E:/Dtds/dom4j.dtd"); // 這樣就向 XML 文檔中增加文檔類型說明: // <!DOCTYPE employees SYSTEM"file://E:/Dtds/dom4j.dtd"> // 如果文檔要使用文檔類型定義(DTD)文檔驗證則必須有Doctype。 try { XMLWriter output = newXMLWriter(new FileWriter(file)); output.write(document); output.close(); } catch (IOException e) { System.out.println(e.getMessage()); } } /** * 利用dom4j進(jìn)行xml文檔的讀取操作 */ public void parserXml(File file) { Document document = null; // 使用 SAXReader 解析 XML 文檔catalog.xml: SAXReader saxReader = new SAXReader(); try { document = saxReader.read(file); } catch (DocumentException e) { e.printStackTrace(); } // 將字符串轉(zhuǎn)為XML // document = DocumentHelper.parseText(fileString); // 獲得根節(jié)點 Element root =document.getRootElement(); // 打印節(jié)點名稱 System.out.println("<" +root.getName() + ">"); // 獲得根節(jié)點下的子節(jié)點遍歷 Iterator<?> iter =root.elementIterator("employee"); // 遍歷employee節(jié)點 while (iter.hasNext()) { // 獲得當(dāng)前子節(jié)點 Element empEle = (Element)iter.next(); System.out.println("<"+ empEle.getName() + ">"); // 獲得當(dāng)前子節(jié)點的屬性遍歷 Iterator<?> attrList = empEle.attributeIterator(); while (attrList.hasNext()) { Attribute attr = (Attribute)attrList.next(); System.out.println(attr.getName() + "=" + attr.getValue()); } // 遍歷employee節(jié)點下所有子節(jié)點 Iterator<?> eleIte =empEle.elementIterator(); while (eleIte.hasNext()) { Element ele = (Element)eleIte.next(); System.out.println("<" + ele.getName() + ">" +ele.getTextTrim()); } // 獲得employee節(jié)點下的子節(jié)點sex值 // String sex =empEle.elementTextTrim("sex"); //System.out.println("sex:" + sex); } System.out.println("</" +root.getName() + ">"); }
public static void main(String[] args) { Dom4jDemo dom4j = new Dom4jDemo(); File file = newFile("e:/dom4j.xml"); // dom4j.createXml(file); dom4j.parserXml(file); } }