本文介绍如何将数据记录在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. IBus prior to 15.11 may cause input problems. See IDEA-78860 for details.

    启动 PyCharm 2017.2, 遇到问题: IBus prior to 15.11 may cause input problems. See IDEA-78860 for details. 解 ...

  2. 红米Note5进入全网通5.0时代,其实是高通已经落后了!

    高通早在去年12月份就正式发布了新一代的骁龙845处理器,接下来就是人们对于搭载骁龙845处理器的手机充满期待,可是转眼到了2018年的3月份,目前已经发布的高端旗舰新机却只有三星S9和三星S9+,而 ...

  3. springboot 创建非web项目及数据源简单使用

    项目组马上要使用springboot来重构程序,首先要对几个比较小的非web项目重构,所以新手入门,简单做了个小例子 代码结构如下: dao层 package com.mysping.myboot00 ...

  4. c++面经积累<1>

    引用和指针 指针是一个实体,需要分配内存空间,而引用只是一个别名,不需要分配内存空间 指针可以有多级,而引用只能有一级. 指针和引用的自增运算不一样,指针是指向下一个空间,而引用是引用的变量值增加 s ...

  5. 关于NOIP2018复赛若干巧合的声明

    关于NOIP2018复赛若干巧合的声明 导言 参加NOIP2018时本人学龄只有两个月,却斩获了省一等奖,保送了重点中学的重点班,这看上去是个我创造的神话,然而,在我自己心中,我认为这只是个巧合(其实 ...

  6. Python通过pip方式安装第三方模块的两种方式

    一:环境 python3.6 windows 10 二:常用命令 如果直接执行pip命令报错,说明pip不在path环境变量中 解决方法: python -m pip list 以下默认可直接使用pi ...

  7. .net core实践系列之短信服务-Sikiro.SMS.Job服务的实现

    前言 本篇会继续讲解Sikiro.SMS.Job服务的实现,在我写第一篇的时候,我就发现我当时设计的架构里Sikiro.SMS.Job这个可以选择不需要,而使用MQ代替.但是为了说明调度任务使用实现也 ...

  8. 跨域访问-需要设置HTTP响应标头

    前提:服务端网站的配置(被请求的网站) 1.需要在IIS服务器站点的功能视图中设置HTTP响应标头: 2.双击“HTTP响应标头”进入设置界面 3.点击右侧添加按钮弹出窗口 4.填入需要设置的信息 名 ...

  9. 教你使用HTML5原生对话框元素,轻松创建模态框组件

    HTML 5.2草案加入了新的dialog元素.但是是一种实验技术. 以前,如果我们想要构建任何形式的模式对话框或对话框,我们需要有一个背景,一个关闭按钮,将事件绑定在对话框中的方式安排我们的标记,找 ...

  10. flask异常处理

    对于异常,通常可以分为两类:一类是可以预知的异常,我们通常会用try...except....捕捉,第二类是未知的error,我们是无法预知的. try: code block except A: e ...