天天看点

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