Java dom4j生成與解析XML案例詳解
一)dom4j介紹
使用方式:在pom.xml中導(dǎo)入dom4j對(duì)應(yīng)的jar
<dependency>
<groupId>dom4j</groupId>
<artifactId>dom4j</artifactId>
<version>1.6.1</version>
</dependency>
優(yōu)點(diǎn):dom4j使Java生成和解析XML靈活性變高,并且代碼易于維護(hù)
API操作類(lèi):
- Document:表示xml文檔信息,是一個(gè)樹(shù)形結(jié)構(gòu)
- Eelment:表示xml的元素結(jié)點(diǎn),提供一些操作其子元素方法的,如文本、屬性、名稱(chēng)空間等
- Attribute:表示元素結(jié)點(diǎn)中的屬性
二)dom4j生成xml
實(shí)現(xiàn)步驟:
第一步:創(chuàng)建一個(gè)Document實(shí)例
Document doc = DocumentHelper.createDocument();
第二步:先添加一個(gè)根結(jié)點(diǎn),然后再添加子結(jié)點(diǎn),構(gòu)造成一個(gè)樹(shù)形結(jié)構(gòu)
Element root = doc.addElement("root");
第三步:添加xml文件樣式(也可自定義樣式),并輸出xml文件到指定的路徑下
OutputFormat format = OutputFormat.createPrettyPrint();
XMLWriter writer = new XMLWriter(new FileOutputStream(file), format);
writer.write(doc);
實(shí)現(xiàn)源碼:
package com.oysept.xml;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.XMLWriter;
import org.jdom2.output.Format;
/**
* dom4j生成xml
* @author ouyangjun
*/
public class CreateDom4j {
public static void main(String[] args) {
// 執(zhí)行dom4j生成xml方法
createDom4j(new File("E:\\dom4j.xml"));
}
public static void createDom4j(File file) {
try {
// 創(chuàng)建一個(gè)Document實(shí)例
Document doc = DocumentHelper.createDocument();
// 添加根節(jié)點(diǎn)
Element root = doc.addElement("root");
// 在根節(jié)點(diǎn)下添加第一個(gè)子節(jié)點(diǎn)
Element oneChildElement= root.addElement("person").addAttribute("attr", "root noe");
oneChildElement.addElement("people")
.addAttribute("attr", "child one")
.addText("person one child one");
oneChildElement.addElement("people")
.addAttribute("attr", "child two")
.addText("person one child two");
// 在根節(jié)點(diǎn)下添加第一個(gè)子節(jié)點(diǎn)
Element twoChildElement= root.addElement("person").addAttribute("attr", "root two");
twoChildElement.addElement("people")
.addAttribute("attr", "child one")
.addText("person two child one");
twoChildElement.addElement("people")
.addAttribute("attr", "child two")
.addText("person two child two");
// xml格式化樣式
// OutputFormat format = OutputFormat.createPrettyPrint(); // 默認(rèn)樣式
// 自定義xml樣式
OutputFormat format = new OutputFormat();
format.setIndentSize(2); // 行縮進(jìn)
format.setNewlines(true); // 一個(gè)結(jié)點(diǎn)為一行
format.setTrimText(true); // 去重空格
format.setPadText(true);
format.setNewLineAfterDeclaration(false); // 放置xml文件中第二行為空白行
// 輸出xml文件
XMLWriter writer = new XMLWriter(new FileOutputStream(file), format);
writer.write(doc);
System.out.println("dom4j CreateDom4j success!");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
XML文件效果圖:

三)dom4j解析xml
實(shí)現(xiàn)步驟:
第一步:創(chuàng)建一個(gè)SAXReader解析器
SAXReader reader = new SAXReader();
第二步:解析xml文件,重新構(gòu)建成一個(gè)Document對(duì)象
Document doc = reader.read(file);
第三步:處理Document對(duì)象信息,在控制臺(tái)打印
實(shí)現(xiàn)源碼:
package com.oysept.xml;
import java.io.File;
import java.util.Iterator;
import java.util.List;
import org.dom4j.Attribute;
import org.dom4j.CDATA;
import org.dom4j.Comment;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.Node;
import org.dom4j.Text;
import org.dom4j.io.SAXReader;
/**
* dom4j解析xml
* @author ouyangjun
*/
public class ParseDom4j {
public static void main(String[] args) {
// 執(zhí)行dom4j解析xml方法
parseDom4j(new File("E:\\dom4j.xml"));
}
public static void parseDom4j(File file) {
try {
// 創(chuàng)建一個(gè)SAXReader解析器
SAXReader reader = new SAXReader();
// 讀取xml文件,轉(zhuǎn)換成Document結(jié)點(diǎn)
Document doc = reader.read(file);
// 遞歸打印xml文檔信息
StringBuffer buffer = new StringBuffer();
parseElement(doc.getRootElement(), buffer);
System.out.println(buffer.toString());
} catch (DocumentException e) {
e.printStackTrace();
}
}
@SuppressWarnings("unchecked")
public static void parseElement(Element element, StringBuffer buffer) {
buffer.append("<"+element.getName());
List<Attribute> attrs = element.attributes();
if (attrs != null) {
for (Attribute attr : attrs) {
buffer.append(" "+attr.getName()+"=\""+attr.getValue()+"\"");
}
}
buffer.append(">");
Iterator<Node> iterator = element.nodeIterator();
while (iterator.hasNext()) {
Node node = iterator.next();
if (node instanceof Element) {
Element eleNode = (Element) node;
parseElement(eleNode, buffer);
}
if (node instanceof Text) {
Text text = (Text) node;
buffer.append(text.getText());
}
if (node instanceof CDATA) {
CDATA dataNode = (CDATA) node;
buffer.append(dataNode.getText());
}
if (node instanceof Comment) {
Comment comNode = (Comment) node;
buffer.append(comNode.getText());
}
}
buffer.append("</"+element.getName()+">");
}
}
XML文件解析效果圖打?。?/p>

到此這篇關(guān)于Java dom4j生成與解析XML案例詳解的文章就介紹到這了,更多相關(guān)Java dom4j生成與解析XML內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java實(shí)現(xiàn)簡(jiǎn)單小畫(huà)板
這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)簡(jiǎn)單小畫(huà)板,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-06-06
springboot集成mybatis-plus全過(guò)程
本文詳細(xì)介紹了如何在SpringBoot環(huán)境下集成MyBatis-Plus,包括配置maven依賴(lài)、application.yaml文件、創(chuàng)建數(shù)據(jù)庫(kù)和Java實(shí)體類(lèi)、Mapper層、Service層和Controller層的設(shè)置,同時(shí),還涵蓋了時(shí)間自動(dòng)填充、分頁(yè)查詢(xún)、多對(duì)一和一對(duì)多的數(shù)據(jù)庫(kù)映射關(guān)系設(shè)置2024-09-09
Java BufferedOutputStream類(lèi)的常用方法講解
這篇文章主要介紹了Java BufferedOutputStream類(lèi)的常用方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-10-10
RabbitMQ消息隊(duì)列中的Channel信道參數(shù)詳解
這篇文章主要介紹了RabbitMQ消息隊(duì)列中的Channel信道參數(shù)詳解,信道是生產(chǎn)消費(fèi)者與rabbit通信的渠道,生產(chǎn)者publish或者消費(fèi)者消費(fèi)一個(gè)隊(duì)列都是需要通過(guò)信道來(lái)通信的,信道是建立在TCP上面的虛擬鏈接,需要的朋友可以參考下2023-08-08
如何對(duì)Mysql數(shù)據(jù)表查詢(xún)出來(lái)的結(jié)果進(jìn)行排序
這篇文章主要介紹了如何對(duì)Mysql數(shù)據(jù)表查詢(xún)出來(lái)的結(jié)果進(jìn)行排序問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-08-08

