天天看點

dom4j 學習一 常用api二 demo

一 常用api

1.1 SAXReader類的方法

dom4j 學習一 常用api二 demo
dom4j 學習一 常用api二 demo
/**
     * 擷取Document 文檔
     * @param file
     * @return org.dom4j.Document
     * @author feizhou
     * @since 2020/9/6 22:47
     */
    public static Document getDocument(File file) throws DocumentException {
        // 建立xml解析器
        SAXReader saxReader = new SAXReader();
        // 加載目标檔案
        Document doc = saxReader.read(file);
        return doc;
    }
           

1.2 Document接口的方法

dom4j 學習一 常用api二 demo
dom4j 學習一 常用api二 demo
dom4j 學習一 常用api二 demo
public class DOM4JTest2 {
	private static String path = "D:\\java\\workSpace\\git\\learnDemo\\src\\main\\java\\com\\example\\demolearn\\other\\jdkClass\\dom4j\\";
	
	public static void main(String[] args) throws Exception {
		
		// 建立xml解析器
		SAXReader saxReader = new SAXReader();
		// 加載目标檔案
		Document doc = saxReader.read(new File(path + "01.xml"));
		Element rootElement = doc.getRootElement();
		
		System.out.println("根元素名稱:" + rootElement.getName());
		
	}
}
           

1.3 Element接口的方法

Element addAttribute(String name, String value);//通過屬性名和值添加屬性
Element addComment(String comment);//添加評論
Element addText(String text);//添加元素标簽值
void add(Attribute attribute);//直接添加屬性
boolean remove(Attribute attribute);//删除屬性
String getText();//擷取元素的标簽值
String elementText(String name);//擷取元素的标簽值
String getTextTrim();//擷取元素的标簽值并會忽略文本2端的空白字元
List attributes(); //擷取屬性集合
int attributeCount();//擷取屬性個數
Iterator attributeIterator();//擷取屬性集合疊代器
String attributeValue(String name);//擷取某個屬性的值
Element element(String name);//擷取第一個子元素
List elements();//擷取子元素集合
Iterator elementIterator();//擷取子元素集合的疊代器
boolean isRootElement();//查詢是否是根元素
剩下的就是繼承他父接口Node的方法了
           

1.4 Attribute接口的方法

getName:擷取屬性的名字,其實是繼承其父接口Node的方法
getValue:擷取屬性的值
           

1.5 OutputFormat類

OutputFormat createPrettyPrint();//輸出漂亮的格式
OutputFormat createCompactFormat() ;//輸出緊湊的格式
setEncoding(String encoding) ;//指定輸出格式
           

二 demo

2.1 列印所有元素

dom4j 學習一 常用api二 demo

2.1.1 列印所有元素

package com.example.demolearn.other.jdkClass.dom4j;


import java.io.File;
import java.util.Iterator;

import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

/**
 * dom4j的使用和分析
 *
 */
public class DOM4JTest2 {
	private static String path = "D:\\java\\workSpace\\git\\learnDemo\\src\\main\\java\\com\\example\\demolearn\\other\\jdkClass\\dom4j\\";
	
	public static void main(String[] args) throws Exception {
		test1();
	}
	
	/**
	 * 列印所有01.xml資訊
	 */
	public static void test1() throws Exception {
		// 建立xml解析器
		SAXReader saxReader = new SAXReader();
		// 加載目标檔案
		Document doc = saxReader.read(new File(path + "01.xml"));
		// 擷取根元素
		Element root = doc.getRootElement();
		getAllElement(root);
	}
	
	/**
	 * 顯示所有屬性
	 * 
	 * @param e
	 * @return void
	 * @author feizhou
	 * @since 2020/9/6 22:44
	 */
	public static void getAllElement(Element e) {
		if (e.elements().size() > 0) {
			for (Element element : e.elements()) {
				getAllElement(element);
			}
		} else {
			System.out.println("----------------------");
			System.out.println("元素名稱:" + e.getName());
			Iterator<Attribute> it = e.attributeIterator();
			while (it.hasNext()) {
				Attribute attr = it.next();
				System.out.println("元素屬性:" + attr.getName() + "=" + attr.getValue());
			}
		}
		
	}
}
           
dom4j 學習一 常用api二 demo

2.1.2 列印所有元素

package com.example.demolearn.other.jdkClass.dom4j;

import java.io.File;
import java.util.Iterator;
import java.util.List;

import org.dom4j.*;
import org.dom4j.io.SAXReader;

/**
 * dom4j的使用和分析
 *
 */
public class DOM4JTest3 {
	private static String path = "D:\\java\\workSpace\\git\\learnDemo\\src\\main\\java\\com\\example\\demolearn\\other\\jdkClass\\dom4j\\";
	
	public static void main(String[] args) throws Exception {
		test1();
	}
	
	/**
	 * 列印所有01.xml資訊
	 */
	public static void test1() throws Exception {
		// 建立xml解析器
		SAXReader saxReader = new SAXReader();
		// 加載目标檔案
		Document doc = saxReader.read(new File(path + "01.xml"));
		// 擷取根元素
		Element root = doc.getRootElement();
		
		getAllElement(root);
		
	}
	
	/**
	 * 顯示所有屬性
	 * 
	 * @return void
	 * @author feizhou
	 * @since 2020/9/6 22:44
	 */
	public static void getAllElement(Element e1) {
		// 擷取根元素的所有直接子節點
		Iterator<Node> it1 = e1.nodeIterator();
		while (it1.hasNext()) {
			Node node = it1.next();
			if (node instanceof Comment) {// 注釋
				System.out.println("注釋内容" + node.getText());
				continue;
			}
			
			if (node instanceof Element) {// 标簽
				System.out.println("---------");
				System.out.println("标簽名字:" + node.getName());
				Element e2 = (Element) node;
				Iterator<Attribute> attributes = e2.attributeIterator();
				while (attributes.hasNext()) {
					Attribute attr = attributes.next();
					System.out.println("元素屬性:" + attr.getName() + "=" + attr.getValue());
				}
				if (e2.elements().size() > 0) {
					getAllElement(e2);
				}
				continue;
			}
			
		}
	}
}

輸出:
---------
标簽名字:students
---------
标簽名字:student
元素屬性:name=張三
元素屬性:location=河南
元素屬性:age=18
---------
标簽名字:teachers
---------
标簽名字:teacher
元素屬性:name=zzs
元素屬性:location=河南
元素屬性:age=18
---------
标簽名字:teacher
元素屬性:name=zzf
元素屬性:location=新疆
元素屬性:age=26
           

2.1.3 把xml檔案的所有标簽名名字、屬性、标簽體、注釋、空白處 等…的内容全部列印出來,格式要求與xml檔案的内容。

package com.example.demolearn.other.jdkClass.dom4j;

import java.io.File;
import java.util.Iterator;

import org.dom4j.*;
import org.dom4j.io.SAXReader;

/**
 * dom4j的使用和分析
 *
 */
public class DOM4JTest3 {
	private static String path = "D:\\java\\workSpace\\git\\learnDemo\\src\\main\\java\\com\\example\\demolearn\\other\\jdkClass\\dom4j\\";
	
	public static void main(String[] args) throws Exception {
		
		SAXReader saxReader = new SAXReader();
		
		Document doc = saxReader.read(new File(path + "01.xml"));
		
		Element root = doc.getRootElement();
		
		StringBuilder sb = new StringBuilder();
		readXml(root, sb);
		
		System.out.println(sb);
	}
	
	// 把xml檔案的所有标簽名名字、屬性、标簽體、注釋、空白處 等...的内容全部列印出來,格式要求與xml檔案的内容。
	public static void readXml(Element element, StringBuilder sb) {
		sb.append("<" + element.getName());
		// 擷取到屬性疊代器添加所有的屬性
		Iterator<Attribute> attriIt = element.attributeIterator();
		while (attriIt.hasNext()) {
			Attribute attribute = attriIt.next();
			sb.append(" " + attribute.getName() + "=\"" + attribute.getValue() + "\"");
		}
		// 添加結束開始标簽的符号
		sb.append(">");
		
		// 擷取所有的子節點
		Iterator<Node> it = element.nodeIterator();
		while (it.hasNext()) {
			Node node = it.next();
			if (node instanceof Text) {
				// 文本
				sb.append(node.getText());
			} else if (node instanceof Comment) {
				// 注釋
				sb.append("<!--" + node.getText() + "-->");
			} else if (node instanceof Element) {
				// 疊代讀取下一個元素
				readXml((Element) node, sb);
			}
		}
		
		// 添加結束标簽
		sb.append("</" + element.getName() + ">");
	}
}



輸出:
<members>
    <students>
        <student name="張三" location="河南" age="18"></student>
    </students>
    <teachers>
        <teacher name="zzs" location="河南" age="18"></teacher>
        <teacher name="zzf" location="新疆" age="26"></teacher>
    </teachers>
</members>
           

2.2 建立xml

package com.example.demolearn.other.jdkClass.dom4j;

import java.io.File;
import java.io.FileOutputStream;

import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.XMLWriter;

/**
 * dom4j的使用和分析
 *
 */
public class DOM4JTest3 {
	private static String path = "D:\\java\\workSpace\\git\\learnDemo\\src\\main\\java\\com\\example\\demolearn\\other\\jdkClass\\dom4j\\";
	
	public static void main(String[] args) throws Exception {
		
		// 建立一個Document執行個體
		Document doc = DocumentHelper.createDocument();
		
		// 添加根節點
		Element root = doc.addElement("members");
		// 在根節點下添加第1個子節點
		Element students = root.addElement("students");
		students.addElement("student").addAttribute("age", "18").addAttribute("location", "河南").addAttribute("name",
				"張三");
		
		// 在根節點下添加第2個子節點
		Element teachers = root.addElement("teachers");
		
		teachers.addElement("teacher").addAttribute("age", "18").addAttribute("location", "河南").addAttribute("name",
				"zzs");
		
		teachers.addElement("teacher").addAttribute("age", "26").addAttribute("location", "新疆").addAttribute("name",
				"zzf");
		
		// xml格式化樣式
		// OutputFormat format = OutputFormat.createPrettyPrint(); // 預設樣式
		
		// 自定義xml樣式
		OutputFormat format = new OutputFormat();
		format.setIndentSize(2); // 行縮進
		format.setNewlines(true); // 一個結點為一行
		format.setTrimText(true); // 去重空格
		format.setPadText(true);
		format.setNewLineAfterDeclaration(false); // 放置xml檔案中第二行為空白行
		
		// 輸出xml檔案
		XMLWriter writer = new XMLWriter(new FileOutputStream(new File(path + "03.xml")), format);
		writer.write(doc);
		
	}
	
}
           
dom4j 學習一 常用api二 demo
上一篇: DOM4J 例子
下一篇: 關于dom4j