XML简介
什么是xml?
- XML 指可扩展标记语言(EXtensible Markup Language)
- XML 是一种标记语言,很类似 HTML
- XML 的设计宗旨是传输数据,而非显示数据
- XML 标签没有被预定义。您需要自行定义标签。
- XML 被设计为具有自我描述性。
- XML 是 W3C 的推荐标准
xml文件实例
下面是自定义的xml文件
<?xml version="1.0" encoding="UTF-8" ?>
<Users>
<User name="Johnson" password="admin" phoneNum="10036363636" email="123456789@qq.com"/>
<User name="leo" password="admin" phoneNum="10036363636" email="123456789@qq.com"/>
<User name="John" password="admin" phoneNum="10036363636" email="123456789@qq.com"/>
<User name="Mary" password="admin" phoneNum="10036363636" email="123456789@qq.com"/>
<User name="Paul" password="admin" phoneNum="10036363636" email="123456789@qq.com"/>
</Users>
- 其中的Users, User元素标签是自定义的,在这里表示用户列表、用户对象
- User元素中的name, password, phoneNum, email代表定义该对象的属性
dom4j
dom4j简介
dom4j是一个用来读写XML文件的Java XML API。dom4j是一个十分优秀的JavaXML API,具有性能优异、功能强大和极其易使用的特点,是一个开放源代码的软件。
dom4j使用方式
- 引入项目依赖,这里以maven项目为例
<dependencies>
<dependency>
<groupId>dom4j</groupId>
<artifactId>dom4j</artifactId>
<version>1.6.1</version>
</dependency>
</dependencies>
- 准备好自定义的xml文件,这里以上面的xml文件为例,将其保存为users.xml
<?xml version="1.0" encoding="UTF-8" ?>
<Users>
<User name="Johnson" password="admin" phoneNum="10036363636" email="123456789@qq.com"/>
<User name="leo" password="admin" phoneNum="10036363636" email="123456789@qq.com"/>
<User name="John" password="admin" phoneNum="10036363636" email="123456789@qq.com"/>
<User name="Mary" password="admin" phoneNum="10036363636" email="123456789@qq.com"/>
<User name="Paul" password="admin" phoneNum="10036363636" email="123456789@qq.com"/>
</Users>
- 编写程序,读取xml文件内容
public static void main(String... strings) throws Exception {
//文件路径
String filePathName = "C:\\Users\\johnson\\Desktop\\users.xml";
//定义dom4j的SAXReader对象
SAXReader reader = new SAXReader();
//通过reader获取到的文件内容被读取并转换成Document对象
Document document = reader.read(new File(filePathName));
//获取文档中的根节点, Element是dom4j的元素对象,即获取Users标签的元素
Element rootElement = document.getRootElement();
//获取根节点中的所有子元素列表,即user对象列表
@SuppressWarnings("unchecked")
List<Element> userElements = rootElement.elements();
//element对象的attributeValue(String name)方法可以获取到元素的属性值
userElements.forEach(userElement -> System.out.println(userElement.attributeValue("name") +
" || " + userElement.attributeValue("password") +
" || " + userElement.attributeValue("phoneNum") +
" || " + userElement.attributeValue("email")));
}
- 由于xml文件元素是自定义的,因此需要自定义的程序来解析,程序运行解析结果如下:
Johnson || admin || 10036363636 || 123456789@qq.com
leo || admin || 10036363636 || 123456789@qq.com
John || admin || 10036363636 || 123456789@qq.com
Mary || admin || 10036363636 || 123456789@qq.com
Paul || admin || 10036363636 || 123456789@qq.com
dom4j xml文件读取写入操作封装实例
package xxx.xxx.xxx.xxx.util;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* 对XML文件进行操作的工具类
*
* Created by Xuyh at 2017年4月21日 下午7:41:42.
*/
public class XMLUtils {
private static Logger logger = LoggerFactory.getLogger(XMLUtils.class);
/**
* 将document写入XML文件
*
* @param filePathName 文件路径名
* @param document
* @return
*/
public static boolean wirteXMLFile(String filePathName, Document document) {
OutputFormat format = OutputFormat.createPrettyPrint();
format.setEncoding("UTF-8");
XMLWriter writer = null;
try {
writer = new XMLWriter(new FileOutputStream(new File(filePathName)), format);
writer.write(document);
writer.flush();
} catch (UnsupportedEncodingException e1) {
logger.warn(e1.getMessage());
return false;
} catch (IOException e2) {
logger.warn(e2.getMessage());
return false;
} finally {
if (writer != null) {
try {
writer.close();
} catch (IOException e) {
logger.warn(e.getMessage());
return false;
}
}
}
return true;
}
/**
* 读取XML文件获取document
*
* @param filePathName 文件路径名
* @return
*/
public static Document readXMLFile(String filePathName) {
SAXReader reader = new SAXReader();
Document document = null;
try {
document = reader.read(new File(filePathName));
} catch (DocumentException e) {
logger.warn(e.getMessage());
}
return document;
}
/**
* 读取XML文件获取document
*
* @param file 文件对象
* @return
*/
public static Document readXMLFile(File file) {
SAXReader reader = new SAXReader();
Document document = null;
try {
document = reader.read(file);
} catch (DocumentException e) {
logger.warn(e.getMessage());
}
return document;
}
}
需要注意的是,该工具类使用到了slf4j库来记录日志
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.22</version>
</dependency>