package com.example;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; import org.junit.Test; public class Demo01 { @Test public void createXMLDemo() throws Exception { // 創(chuàng)建saxReader對(duì)象 SAXReader reader = new SAXReader(); // 通過(guò)read方法讀取一個(gè)文件 轉(zhuǎn)換成Document對(duì)象 Document document = reader.read(new File('src/car.xml')); //獲取根節(jié)點(diǎn)元素對(duì)象 Element node = document.getRootElement(); //遍歷所有的元素節(jié)點(diǎn) // listNodes(node); elementMethod(node); } @Test public void readXMLDemo() throws Exception { Document document = DocumentHelper.createDocument(); Element root = document.addElement( 'cars' ); Element supercarElement= root.addElement('supercars') .addAttribute('company', 'Ferrai'); supercarElement.addElement('carname') .addAttribute('type', 'Ferrari 101') .addText('Ferrari 101'); supercarElement.addElement('carname') .addAttribute('type', 'sports') .addText('Ferrari 202'); // 寫(xiě)入到一個(gè)新的文件中 writer(document); } /** * 把document對(duì)象寫(xiě)入新的文件 * * @param document * @throws Exception */ public void writer(Document document) throws Exception { // 緊湊的格式 // OutputFormat format = OutputFormat.createCompactFormat(); // 排版縮進(jìn)的格式 OutputFormat format = OutputFormat.createPrettyPrint(); // 設(shè)置編碼 format.setEncoding('UTF-8'); // 創(chuàng)建XMLWriter對(duì)象,指定了寫(xiě)出文件及編碼格式 // XMLWriter writer = new XMLWriter(new FileWriter(new // File('src//a.xml')),format); XMLWriter writer = new XMLWriter(new OutputStreamWriter( new FileOutputStream(new File('src//car.xml')), 'UTF-8'), format); // 寫(xiě)入 writer.write(document); // 立即寫(xiě)入 writer.flush(); // 關(guān)閉操作 writer.close(); } /** * 遍歷當(dāng)前節(jié)點(diǎn)元素下面的所有(元素的)子節(jié)點(diǎn) * * @param node */ public void listNodes(Element node) { System.out.println('當(dāng)前節(jié)點(diǎn)的名稱(chēng)::' + node.getName()); // 獲取當(dāng)前節(jié)點(diǎn)的所有屬性節(jié)點(diǎn) List list = node.attributes(); // 遍歷屬性節(jié)點(diǎn) for (Attribute attr : list) { System.out.println(attr.getText() + '-----' + attr.getName() + '---' + attr.getValue()); } if (!(node.getTextTrim().equals(''))) { System.out.println('文本內(nèi)容::::' + node.getText()); } // 當(dāng)前節(jié)點(diǎn)下面子節(jié)點(diǎn)迭代器 Iterator it = node.elementIterator(); // 遍歷 while (it.hasNext()) { // 獲取某個(gè)子節(jié)點(diǎn)對(duì)象 Element e = it.next(); // 對(duì)子節(jié)點(diǎn)進(jìn)行遍歷 listNodes(e); } } /** * 介紹Element中的element方法和elements方法的使用 * * @param node */ public void elementMethod(Element node) { // 獲取node節(jié)點(diǎn)中,子節(jié)點(diǎn)的元素名稱(chēng)為supercars的元素節(jié)點(diǎn)。 Element e = node.element('supercars'); // 獲取supercars元素節(jié)點(diǎn)中,子節(jié)點(diǎn)為carname的元素節(jié)點(diǎn)(可以看到只能獲取第一個(gè)carname元素節(jié)點(diǎn)) Element carname = e.element('carname'); System.out.println(e.getName() + '----' + carname.getText()); // 獲取supercars這個(gè)元素節(jié)點(diǎn) 中,所有子節(jié)點(diǎn)名稱(chēng)為carname元素的節(jié)點(diǎn) 。 List carnames = e.elements('carname'); for (Element cname : carnames) { System.out.println(cname.getText()); } // 獲取supercars這個(gè)元素節(jié)點(diǎn) 所有元素的子節(jié)點(diǎn)。 List elements = e.elements(); for (Element el : elements) { System.out.println(el.getText()); } } }
|