本文介绍如何将数据记录在XML文件中,然后通过DOM4J直接从XML中读取到数据。

依赖包:

<dependency>
<groupId>dom4j</groupId>
<artifactId>dom4j</artifactId>
<version>1.6.1</version>
</dependency>

工具类代码:

 package testTraffic.utils;

 import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.net.URISyntaxException;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map; /**
* XmlUtils class
*
* @author gongxingrui
* @date 2018-12-07
**/
public class XmlUtils { public static Document readXml(String filePath) throws DocumentException {
return readXml(new File(filePath));
} public static Document readXml(File file) throws DocumentException {
SAXReader reader = new SAXReader();
return reader.read(file);
} public static Document readXml(InputStream inputStream) throws DocumentException {
SAXReader reader = new SAXReader();
return reader.read(inputStream);
} public static Document readXmlFromResources(String resource) throws DocumentException, IOException, URISyntaxException {
SAXReader reader = new SAXReader();
return reader.read(ResourcesUtils.getResourceAsFile(resource));
} public static String getAttribute(Element element, String attrName) {
return element.attributeValue(attrName);
} public static String getText(Element element) {
return element.getText();
} public static List<Element> getElements(Element element, String tagName) {
return element.elements(tagName);
} /**
* 根据节点名称获取子节点数据
*/
public static String getElementText(String resource, String qName) throws Exception {
Element root = readXmlFromResources(resource).getRootElement();
String text = root.elementText(qName);
return text.trim();
} /**
* 根据节点名称获取子节点的子节点数据
*/
public static String getElementText(String resource, String qName, String SubQName) throws Exception {
Element root = readXmlFromResources(resource).getRootElement();
String text = root.element(qName).elementText(SubQName);
return text.trim();
} /**
* 根据节点名称获取子节点的子节点的数据列表
*/
public static List<String> getElementTextList(String resource, String qName) throws Exception {
List<Element> elementList = readXmlFromResources(resource).getRootElement().element(qName).elements();
List<String> list = new ArrayList<>();
for (Element e : elementList) {
list.add(e.getTextTrim());
}
return list;
} }

测试代码:

    @Test
public void testXML6() throws Exception {
String path2 = "shelby/data/sql/demo/sql2.xml";
String s = XmlUtils.getElementText(path2, "insert_1");
logger.info(s); List<String> list = XmlUtils.getElementTextList(path2, "del_group");
logger.info(list); String s2 = XmlUtils.getElementText(path2, "del_group_2", "del_2");
logger.info(s2);
}

测试结果:

-- ::14.746 INFO  testTraffic.testDemo.testXmlDemo testXML6 : insert into `t_admin_user` (`id`, `user_name`, `user_password`, `del_flag`, `create_time`, `update_time`)
VALUES( null,'testuser','testuser123','','2019-01-21 19:43:58','2019-01-22 19:44:03');
-- ::14.763 INFO testTraffic.testDemo.testXmlDemo testXML6 : [delete from t_admin_user WHERE user_name = 'testuser';, delete from t_admin_user WHERE user_name = 'testuser2';]
-- ::14.768 INFO testTraffic.testDemo.testXmlDemo testXML6 : delete from t_admin_user WHERE user_name = 'testuser2'; Process finished with exit code

XML文档:

 <?xml version="1.0" encoding="UTF-8"?>
<mybatisGroup id="预置数据语句">
<del_1 id="del_1" type="delete">
delete from t_admin_user WHERE user_name = 'testuser';
</del_1>
<del_2 id="del_2" type="delete">
delete from t_admin_user WHERE user_name = 'testuser2';
</del_2>
<insert_1 id="insert_1" type="insert">
insert into `t_admin_user` (`id`, `user_name`, `user_password`, `del_flag`, `create_time`, `update_time`)
VALUES( null,'testuser','testuser123','0','2019-01-21 19:43:58','2019-01-22 19:44:03');
</insert_1> <del_group>
<statement>
delete from t_admin_user WHERE user_name = 'testuser';
</statement>
<statement>
delete from t_admin_user WHERE user_name = 'testuser2';
</statement>
</del_group> <del_group_2>
<del_1>
delete from t_admin_user WHERE user_name = 'testuser';
</del_1>
<del_2>
delete from t_admin_user WHERE user_name = 'testuser2';
</del_2>
<del_3>
delete from t_admin_user WHERE user_name = 'testuser3';
</del_3>
</del_group_2> </mybatisGroup>

Java之XML操作:从XML中直接获取数据的更多相关文章

  1. react+dva 全局model中异步获取数据state在组件中取不到值

    先上结论,不是取不到,是写法有问题. 全文分4部分,1是问题描述,2是一开始的解决想法(错误做法),3是问题产生原因的思考,4是正常解决方法.只想看结论直接跳4 1.问题描述 接触react dva一 ...

  2. dataTransfer.getData()在dragover,dragenter,dragleave中无法获取数据的问题

    做拖拽相关效果时,想在ondragover时给被拖拽元素添加一些样式,于是在dragover事件的函数中通过dataTransfer.getData()获取在dragstart中设置的数据,然而发现d ...

  3. MySQL 中随机获取数据

    由于需要大概研究了一下MYSQL的随机抽取实现方法. 目前采用的方法: SELECT * FROM tablename ORDER BY RAND() LIMIT 实现原理: 通过ORDER BY R ...

  4. java中XML操作:xml与string互转、读取XML文档节点及对XML节点增删改查

    一.XML和String互转: 使用dom4j程式变得很简单 //字符串转XML String xmlStr = \"......\"; Document document = D ...

  5. XML操作:1.XML类(http://blog.csdn.net/happy09li/article/details/7460521)

    XML绑定TreeView private void XmlOperation_Load(object sender, EventArgs e) { path = AppDomain.CurrentD ...

  6. java 对excel操作 读取、写入、修改数据;导出数据库数据到excel

    ============前提加入jar包jxl.jar========================= // 从数据库导出数据到excel public List<Xskh> outPu ...

  7. 使用SQL语句从数据库一个表中随机获取数据

    -- 随机获取 10 条数据 SQL Server:SELECT TOP 10 * FROM T_USER ORDER BY NEWID() ORACLE:SELECT * FROM (SELECT ...

  8. ASP.NET中动态获取数据使用Highcharts图表控件【Copy By Internet】

    具体实现的效果如图:

  9. 哪种方式更适合在React中获取数据?

    作者:Dmitri Pavlutin 译者:小维FE 原文:dmitripavlutin.com 国外文章,笔者采用意译的方式,以保证文章的可读性. 当执行像数据获取这样的I/O操作时,你必须发起获取 ...

随机推荐

  1. oracle 乘积的实现方法

    with abc(col1) as ( ' from dual union all ' from dual union all ' from dual ) select col1,ln(col1),e ...

  2. Boost 和 Boost.Build 的设置

    问题: 安装编译完 Boost 后,如果不设置 BOOST_ROOT 和 BOOST_BUILD_PATH 则可能导致使用 bjam 时定位到 Boost 默认的路径 /usr/share/boost ...

  3. CentOS 安装 clang

    Clang是一个C语言.C++.Objective-C.Objective-C++语言的轻量级编译器.源代码发布于BSD协议下.2013年4 月,Clang已经全面支持C++11标准,并开始实现C++ ...

  4. Error: Cannot find module 'babel-runtime/regenerator'

    在做调用阿里云短信接口时遇到的一个问题 错误原因:没有正确安装相应的mmodule 解决办法: 第一步:在package.json中加入依赖label-runtime 第二步:在Terminal中 n ...

  5. visualbox 安装

    1.下载地址:官网 2.安装步骤 3.新建虚拟机

  6. mskitten

    简介 一个普普通通的Java程序员,在某制造业外企工作. 技术栈 主要是Core Java,准备向Java Web挺进. 非计算机专业学生,在努力提升计算机基本素养(操作系统.算法).有好书好资源欢迎 ...

  7. Win10 Anaconda下TensorFlow-GPU环境搭建详细教程(包含CUDA+cuDNN安装过程)

    目录 前言 第一步:安装Anaconda 1.下载和安装 2.配置Anaconda环境变量 第二步:安装TensorFlow-GPU 1.创建conda环境 2.激活环境 3.安装tensorflow ...

  8. ORM简介 单表添加修改删除表记录

    ---------------------------------------------------------------目标既定,在学习和实践过程中无论遇到什么困难.曲折都不灰心丧气,不轻易改变 ...

  9. Python-递归复习-斐波那契-阶乘-52

    # 超过最大递归限制的报错# 只要写递归函数,必须要有结束条件. # 返回值# 不要只看到return就认为已经返回了.要看返回操作是在递归到第几层的时候发生的,然后返回给了谁.# 如果不是返回给最外 ...

  10. 类装饰器,元类,垃圾回收GC,内建属性、内建方法,集合,functools模块,常见模块

    '''''''''类装饰器'''class Test(): def __init__(self,func): print('---初始化---') print('func name is %s'%fu ...