Java 操作xml文件的dom4J库使用

来源:互联网 发布:linux下touch命令 编辑:程序博客网 时间:2024/04/28 10:32

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使用方式

  1. 引入项目依赖,这里以maven项目为例
    <dependencies>        <dependency>            <groupId>dom4j</groupId>            <artifactId>dom4j</artifactId>            <version>1.6.1</version>        </dependency>    </dependencies>
  1. 准备好自定义的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>
  1. 编写程序,读取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")));}
  1. 由于xml文件元素是自定义的,因此需要自定义的程序来解析,程序运行解析结果如下:
Johnson || admin || 10036363636 || 123456789@qq.comleo || admin || 10036363636 || 123456789@qq.comJohn || admin || 10036363636 || 123456789@qq.comMary || admin || 10036363636 || 123456789@qq.comPaul || 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>