Java之XML操作:从XML中直接获取数据

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

依赖包:

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

工具类代码:

 1 package testTraffic.utils;
 2
 3 import org.dom4j.Document;
 4 import org.dom4j.DocumentException;
 5 import org.dom4j.Element;
 6 import org.dom4j.io.SAXReader;
 7 import java.io.File;
 8 import java.io.IOException;
 9 import java.io.InputStream;
10 import java.net.URISyntaxException;
11 import java.util.ArrayList;
12 import java.util.LinkedHashMap;
13 import java.util.List;
14 import java.util.Map;
15
16 /**
17  * XmlUtils class
18  *
19  * @author gongxingrui
20  * @date 2018-12-07
21  **/
22 public class XmlUtils {
23
24
25     public static Document readXml(String filePath) throws DocumentException {
26         return readXml(new File(filePath));
27     }
28
29
30     public static Document readXml(File file) throws DocumentException {
31         SAXReader reader = new SAXReader();
32         return reader.read(file);
33     }
34
35     public static Document readXml(InputStream inputStream) throws DocumentException {
36         SAXReader reader = new SAXReader();
37         return reader.read(inputStream);
38     }
39
40
41     public static Document readXmlFromResources(String resource) throws DocumentException, IOException, URISyntaxException {
42         SAXReader reader = new SAXReader();
43         return reader.read(ResourcesUtils.getResourceAsFile(resource));
44     }
45
46
47     public static String getAttribute(Element element, String attrName) {
48         return element.attributeValue(attrName);
49     }
50
51     public static String getText(Element element) {
52         return element.getText();
53     }
54
55     public static List<Element> getElements(Element element, String tagName) {
56         return element.elements(tagName);
57     }
58
59     /**
60      * 根据节点名称获取子节点数据
61      */
62     public static String getElementText(String resource, String qName) throws Exception {
63         Element root = readXmlFromResources(resource).getRootElement();
64         String text = root.elementText(qName);
65         return text.trim();
66     }
67
68     /**
69      * 根据节点名称获取子节点的子节点数据
70      */
71     public static String getElementText(String resource, String qName, String SubQName) throws Exception {
72         Element root = readXmlFromResources(resource).getRootElement();
73         String text = root.element(qName).elementText(SubQName);
74         return text.trim();
75     }
76
77     /**
78      * 根据节点名称获取子节点的子节点的数据列表
79      */
80     public static List<String> getElementTextList(String resource, String qName) throws Exception {
81         List<Element> elementList = readXmlFromResources(resource).getRootElement().element(qName).elements();
82         List<String> list = new ArrayList<>();
83         for (Element e : elementList) {
84             list.add(e.getTextTrim());
85         }
86         return list;
87     }
88
89
90 }

测试代码:

    @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);
    }   

测试结果:

2019-01-28 16:13: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‘,‘0‘,‘2019-01-21 19:43:58‘,‘2019-01-22 19:44:03‘);
2019-01-28 16:13: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‘;]
2019-01-28 16:13:14.768 INFO  testTraffic.testDemo.testXmlDemo testXML6 : delete from t_admin_user WHERE user_name = ‘testuser2‘;

Process finished with exit code 0

XML文档:

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <mybatisGroup id="预置数据语句">
 3     <del_1 id="del_1" type="delete">
 4         delete from t_admin_user WHERE user_name = ‘testuser‘;
 5     </del_1>
 6     <del_2 id="del_2" type="delete">
 7         delete from t_admin_user WHERE user_name = ‘testuser2‘;
 8     </del_2>
 9     <insert_1 id="insert_1" type="insert">
10         insert into `t_admin_user` (`id`, `user_name`, `user_password`, `del_flag`, `create_time`, `update_time`)
11         VALUES( null,‘testuser‘,‘testuser123‘,‘0‘,‘2019-01-21 19:43:58‘,‘2019-01-22 19:44:03‘);
12     </insert_1>
13
14     <del_group>
15         <statement>
16             delete from t_admin_user WHERE user_name = ‘testuser‘;
17         </statement>
18         <statement>
19             delete from t_admin_user WHERE user_name = ‘testuser2‘;
20         </statement>
21     </del_group>
22
23     <del_group_2>
24         <del_1>
25             delete from t_admin_user WHERE user_name = ‘testuser‘;
26         </del_1>
27         <del_2>
28             delete from t_admin_user WHERE user_name = ‘testuser2‘;
29         </del_2>
30         <del_3>
31             delete from t_admin_user WHERE user_name = ‘testuser3‘;
32         </del_3>
33     </del_group_2>
34
35 </mybatisGroup>

原文地址:https://www.cnblogs.com/gongxr/p/10330694.html

时间: 2024-11-06 15:11:36

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

MySQL 中随机获取数据

由于需要大概研究了一下MYSQL的随机抽取实现方法. 目前采用的方法: SELECT * FROM tablename ORDER BY RAND() LIMIT 1 实现原理: 通过ORDER BY RAND()来打乱数据的排序,LIMIT 来限制获取数据的条数. 缺点: 效率低.在进行大数据量检索时,会增加检索时间.一个15万余条的库,查询5条数据,居然要8秒以上. 官方手册说明,rand()放在ORDER BY 子句中会被执行多次,自然效率很低.

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

一.XML和String互转: 使用dom4j程式变得很简单 //字符串转XML String xmlStr = \"......\"; Document document = DocumentHelper.parseText(xmlStr); // XML转字符串 Document document = ...; String text = document.asXML(); //这里的XML DOCUMENT为org.dom4j.Document 二.读取XML文档节点: pack

使用java代码对zookeeper集群中的solrCloud数据进行CURD

1 导入相关的pom依赖 <dependencies> <dependency> <groupId>org.apache.solr</groupId> <artifactId>solr-solrj</artifactId> <version>4.10.2</version> </dependency> <dependency> <groupId>commons-logging

commons-io在struts框架中无法获取upload.parseRequest(request)上传的文件解决方案

commons-io在struts框架中无法获取upload.parseRequest(request)上传的文件的主要原因是因为struts将request进行了封装,在文件上传时struts会将HttpServletRequest请求被转成了MultiPartRequestWrapper,所以如需使用request,则需要将struts封装好的的MultiPartRequestWrapper转换成HttpServletRequest,这里需要实行两部操作: 操作一:创建java类,继承Jak

[j2ee]java中的xml操作

一.XML简单介绍      xml是可扩展标记语言,主要用来标记数据.定义数据类型,很适合万维网传输. xml特点: xml是一种标记语言.非常类似HTML xml的设计宗旨是数据传输,而不是显示数据 xml标签没有被提前定义,须要自行定义标签 xml被设计为具有自我描写叙述性 xml是W3C的推荐标准 xml和html对照: XML被设计为传输和存储数据,其焦点是数据的内容. html被设计用来显示数据,其焦点是数据的外观. html旨在显示信息,而xml旨在传输信息. 演示样例: <boo

Java中的XML操作

一.XML简介 1.  XML,即可扩展标记语言(Extendsible Markup Language),标准通用标记语言的子集,一种用于标记电子文件使其具有结构性的标记语言.它可以用来标记数据.定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言.它非常适合万维网传输,提供统一的方法来描述和交换独立于应用程序或供应商的结构化数据. XML是一种标记语言,很类似HTML XML的设计宗旨是传输数据,而非显示数据 XML标签没有被预定义,需要自定义标签 XML被设计为具有自我描述性 XM

kbmmw 中XML 操作入门(跨平台,而且可以与JSON,YAML,BSON 直接互相转换)

delphi 很早以前就自带了xml 的操作,最新版里面有三种XML 解释器,一种是MSXML,看名字就知道 这个是微软自带的,这个据delphi 官方称是速度是最快的,但是只能在windows 上使用.另外两个是 OmniXML, ADOM, 这两个都是跨平台的.但是速度比MSXML 慢点.在delphi 10.2 里面,WINDOWS 应用默认使用MSXML, linux 应用默认使用OmniXML. 当然也可以通过强行改变 今天我们讲一下如何使用kbmmw 内置的XML 解释器处理XML

C#中对XML操作 &lt;第二篇&gt;

一.XML文件操作中与.Net中对应的类 微软的.NET框架在System.xml命名空间提供了一系列的类用于Dom的实现. 以下给出XML文档的组成部分对应.NET中的类: XML文档组成部分 对应.net中的类 处理指令 XmlProcessingInstruction 专指元素节点 XmlElement 属性 XmlAttribute 文本节点 XmlText 节点 XmlNode 文档 XmlDocument XmlWriter 对象的特性 XmlWriterSettings 注释 Xm

Java XML操作之JAXB玩转命名空间

声明:如果你正在发愁xml命名空间及其前缀问题,那么请继续,否则请跳过 本文讲解使用jaxb结合dom4j的XMLFilterImpl过滤器实现序列化和反序列化的完全控制 主要实现以下功能 序列化及反序列化时忽略命名空间 序列化时使用@XmlRootElement(namespace="http://www.lzrabbit.cn")注解作为类的默认命名空间,彻底消除命名空间前缀 序列化时引用类有不同命名空间时也不会生成命名空间前缀,而是在具体的xml节点上添加相应的xmlns声明 其