本文介绍如何将数据记录在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. 如何理解render: h => h(App)

    学习vuejs的时候对这句代码不理解 new Vue({ el: '#app', router, store, i18n, render: h => h(App) }) 查找了有关资料,以下为结 ...

  2. ind2sub

    ind2sub 线性索引的下标 语法 [I,J] = ind2sub(siz,IND)[I1,I2,I3,...,In] = ind2sub(siz,IND)   说明 ind2sub 函数确定与数组 ...

  3. Luogu P4169 [Violet]天使玩偶/SJY摆棋子

    传送门 二维平面修改+查询,cdq分治可以解决. 求关于某个点曼哈顿距离(x,y坐标)最近的点——dis(A,B) = |Ax-Bx|+|Ay-By| 但是如何去掉绝对值呢? 查看题解发现假设所有的点 ...

  4. C# 中使用log4.net的注意事项

    新建Log4Net.config文件,内容为 <?xml version="1.0" encoding="utf-8" ?> <configu ...

  5. BZOJ3309 DZY Loves Maths 莫比乌斯反演、线性筛

    传送门 推式子(默认\(N \leq M\)): \(\begin{align*} \sum\limits_{i=1}^N \sum\limits_{j=1}^Mf(gcd(i,j)) & = ...

  6. 窥探ASP.Net MVC底层原理 实现跨越Session的分布式TempData

    1.问题的引出 我相信大家在项目中都使用过TempData,TempData是一个字典集合,一般用于两个请求之间临时缓存数据或者页面之间传递消息.也都知道TempData是用Session来实现的,既 ...

  7. 渗透测试_利用Burp爆破用户名与密码

    burp 全称 Burp Suite, 是用于攻击web 应用程序的集成平台.它包含了许多工具,可以抓包可以爆破也可以扫描漏洞. 主要组件如下: Proxy——是一个拦截HTTP/S的代理服务器,作为 ...

  8. 二十:让行内元素在div中垂直居中

    (1)使用display:table-cell配合vertical-align:center(淘宝也是这样用的) <div class="method4"> <s ...

  9. Python监控服务器利器--psutil

    Python监控服务器利器--psutil 服务器的监控通过安装一些常用的监控软件之外,有时也需要运行一些shell或Python脚本:shell下可以使用系统自带的ps/free/top/df等sh ...

  10. vue 渲染函数&jsx

    前端更新状态,更新视图,所以性能问题主要由Dom操作引起的,而js解析编译dom渲染就要快得多,  所把要js和html混写. vue 的动态js操作 html  方法:reader函数: vue  ...