目录

  • 一、dom4j简介
  • 二、XML文档操作
  • 1.添加依赖
  • 2.读取XML文件,获得document对象
  • 3.节点操作
  • 4.属性操作
  • 5.将文档写入XML文件
  • 6.添加节点(示例)
  • 7.删除节点(示例)
  • 8.XPath 语法



一、dom4j简介

dom4j就是一个开源的、简易的可以帮助java解析xml文件的api 。

dom4j官网下载地址:https://dom4j.github.io

java springboot解析xml_spring boot

二、XML文档操作

1.添加依赖

<dependency>
	<groupId>org.dom4j</groupId>
	<artifactId>dom4j</artifactId>
	<version>2.1.3</version>
</dependency>
<dependency>
    <groupId>jaxen</groupId>
    <artifactId>jaxen</artifactId>
    <version>1.2.0</version>
</dependency>

2.读取XML文件,获得document对象

代码如下(示例):

public static Document read(String filename) {
	SAXReader reader = new SAXReader();
	Document  document = reader.read(new File(filename));
	return document;
 }

3.节点操作

代码如下(示例):

public static Document operate(String filename) {

	SAXReader reader = new SAXReader();
	Document  document = reader.read(new File(filename));
	
	// 获取文档根节点
	Element rootElm = document.getRootElement();      
	// 取得某个节点的子节点.
    Element node=rootElm.element("节点名称");
	// 在某节点下添加子节点.
    Element childNode  = node.addElement("子节点名称");
	// 获取节点文字
	String text=childNode.getText(); 
	// 设置节点文字
	childNode.setText("节点文字");  
	// 删除节点
	parentElm.remove(childElm);
	
	return document;

 }

4.属性操作

代码如下(示例):

public static Document attrOperate(String filename) {

	SAXReader reader = new SAXReader();
	Document  document = reader.read(new File(filename));
	
	// 获取文档根节点
	Element rootElm = document.getRootElement(); 
	// 获取节点下的指定属性
    Attribute attribute=rootElm.attribute("属性名");
	// 获取属性的文字
    String text=attribute.getText();
	// 删除属性
	rootElm.remove(attribute);
	// 设置节点的属性和文字.
    newMemberElm.addAttribute("属性名", "文字");
	// 设置属性的文字
	attribute.setText("文字");
		
	return document;

 }

5.将文档写入XML文件

代码如下(示例):

public static void writeXml(Document document, String filename) {
	OutputFormat format = OutputFormat.createPrettyPrint();
	format.setEncoding("GBK");
	XMLWriter writer = new XMLWriter(new FileWriter(filename),format);
	writer.write(document);
	writer.close();
}

6.添加节点(示例)

public static void addAttribute(String filename) {

    SAXReader reader = new SAXReader();
    Document  document = reader.read(new File(filename));

    // 需要插入的父节点
    Element parentElement = document.getRootElement().element("books");
	// 插入子节点
	Element childElement = parentElement.addElement("book");
	//设置子节点属性name值
    childElement.addAttribute("name", "java");
    // 子节点下插入节点
    Element price = childElement.addElement("price");
    //设置节点属性name值
    price.addAttribute("name", "price");
    // 设置节点文字
    price.setText("30"); 

    // 写入文档
    writeXml(document,filename);
}

结果示例:

<books>
	<book name="css">
	  <price>20</price>
	</book>
	<book name="java">
	  <price name="price">30</price>
	</book>
</books>

7.删除节点(示例)

public static void remove(String filename) {

	SAXReader reader = new SAXReader();
	Document  document = reader.read(new File(filename));

	Element parentElement = document.getRootElement().element(parentElm);
    // 使用xpath找到指定节点属性name值为java
	Node node = document.selectSingleNode("//book[@name='java']");

	parentElement.remove(node);

	// 写入文档
	writeXml(document,filename);
}

8.XPath 语法

表达式

描述

books

选取 books 节点下所有子节点

/books

选取根节点 books

books/book

选取 books 下名为 book 的所有子节点

//book

选取所有 book 子节点,不管它们在文档中的位置

//@name

选取所有名为 name 的属性

/books/book[1]

选取属于 books 子节点的第一个 book 节点

/books/book[last()]

选取属于 books 子节点的最后一个 book 节点

/books/book[last()-1]

选取属于 books 子节点的倒数第二个 book 节点

/books/book[position()< 3]

选取前两个属于 books 节点的子节点的 book 节点

//book[@name]

选取所有拥有名为 name 的属性的 book 节点

//book[@name=‘css’]

选取所有 book 节点,要求这些节点拥有值为 css 的 name 属性

/books/book[price>20]

选取所有 books 节点的 book 节点,要求book节点的子节点 price 节点的值须大于 20