在maven中添加dom4j的依賴, (如何使用eclipse構建maven項目, 這里就不在贅述)
<!-- https://mvnrepository.com/artifact/org.dom4j/dom4j --> <dependency> <groupId>org.dom4j</groupId> <artifactId>dom4j</artifactId> <version>2.0.0</version> </dependency>
這里指的注意的是, 如果引入的版本較低, 可能不能使用dom4j的包, 我之前引入的是1.6.1版本, 就是提示不能用, 后來經過分析, 斷定是引入版本過低導致。
下面是個人測試使用的案例, 大家可以直接拷貝使用, 使用工具是eclipse.
package com.test; import java.io.File; import java.io.FileOutputStream; import java.io.OutputStreamWriter; import java.util.Iterator; import java.util.List; import org.dom4j.Attribute; 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; /* * DOM4J類 DOM4J定義了幾個Java類。以下是最常見的類: Document - 表示整個XML文檔。文檔Document對象是通常被稱為DOM樹。 Element - 表示一個XML元素。 Element對象有方法來操作其子元素,它的文本,屬性和名稱空間。 Attribute - 表示元素的屬性。屬性有方法來獲取和設置屬性的值。它有父節點和屬性類型。 Node - 代表元素,屬性或處理指令 常見DOM4J的方法 當使用DOM4J,還有經常用到的幾種方法: SAXReader.read(xmlSource)() - 構建XML源的DOM4J文檔。 Document.getRootElement() - 得到的XML的根元素。 Element.node(index) - 獲得在元素特定索引XML節點。 Element.attributes() - 獲取一個元素的所有屬性。 Node.valueOf(@Name) - 得到元件的給定名稱的屬性的值。 * * */ public class ParseXml { public void readXML() throws Exception { // 創建saxReader對象 SAXReader reader = new SAXReader(); // 通過read方法讀取一個文件 轉換成Document對象 Document document = reader.read(new File("src/test1.xml")); // 獲取根節點元素對象 Element node = document.getRootElement(); // 遍歷所有的元素節點 listNodes(node); elementMethod(node); } public void createXML() throws Exception { Document document = DocumentHelper.createDocument(); Element root = document.addElement("cars"); Element supercarElement = root.addElement("supercars").addAttribute("company", "Ferrai"); supercarElement.addElement("carname").addAttribute("type", "FerrariAttr").addText("FerrariText"); supercarElement.addElement("carname").addAttribute("type", "sportsAttr").addText("sportsText"); // 寫入到一個新的文件中 writer(document); } /** * 把document對象寫入新的文件 * * @param document * @throws Exception */ public void writer(Document document) throws Exception { // 緊湊的格式 // OutputFormat format = OutputFormat.createCompactFormat(); // 排版縮進的格式 OutputFormat format = OutputFormat.createPrettyPrint(); // 設置編碼 format.setEncoding("UTF-8"); // 創建XMLWriter對象,指定了寫出文件及編碼格式 // XMLWriter writer = new XMLWriter(new FileWriter(new // File("src//a.xml")),format); XMLWriter writer = new XMLWriter( new OutputStreamWriter(new FileOutputStream(new File("src//test1.xml")), "UTF-8"), format); // 寫入 writer.write(document); // 立即寫入 writer.flush(); // 關閉操作 writer.close(); } /** * 遍歷當前節點元素下面的所有(元素的)子節點 * * @param node */ public void listNodes(Element node) { System.out.println("當前節點的名稱::" + node.getName()); // 獲取當前節點的所有屬性節點 List<Attribute> list = node.attributes(); // 遍歷屬性節點 for (Attribute attr : list) { System.out.println(attr.getText() + "-----" + attr.getName() + "---" + attr.getValue()); } if (!(node.getTextTrim().equals(""))) { System.out.println("文本內容::::" + node.getText()); } // 當前節點下面子節點迭代器 Iterator<Element> it = node.elementIterator(); // 遍歷 while (it.hasNext()) { // 獲取某個子節點對象 Element e = it.next(); // 對子節點進行遍歷 listNodes(e); } } /** * * @param node */ public void elementMethod(Element node) { // 獲取node節點中,子節點的元素名稱為supercars的元素節點。 Element e = node.element("supercars"); // 獲取supercars元素節點中,子節點為carname的元素節點(可以看到只能獲取第一個carname元素節點) Element carname = e.element("carname"); System.out.println(e.getName() + "----" + carname.getText()); // 獲取supercars這個元素節點 中,所有子節點名稱為carname元素的節點 。 List<Element> carnames = e.elements("carname"); for (Element cname : carnames) { System.out.println(cname.getText()); } // 獲取supercars這個元素節點 所有元素的子節點。 List<Element> elements = e.elements(); for (Element el : elements) { System.out.println(el.getText()); } } }
