java读取XML

Wesley13
• 阅读 800

方法不在多,能用就好。

我采用的是dom4j

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

读取的文件内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<users>
    <module id="1">
        <user index="1">
            <name>tom</name>
            <password>12345</password>
            <date>20150526</date>
        </user>
        <user index="2">
            <name>jack</name>
            <password>5%</password>
            <date>20150526</date>
        </user>
        <user index="3">
            <name>john</name>
            <password>5%</password>
            <date>20150526</date>
        </user>
    </module>
</users>

读取思路是:

1. 创建一个SAXReader实例;

2. 创建一个文件读取BufferedReader实例;

3. 创建一个Document实例读取BufferedReader;

4. 获取xml文件的根节点;

5. 获取根节点的子节点;

6. 遍历子节点,获取节点名用getName(),获取节点的值用getText(),获取属性值用attributeValue(String)

获取根节点的代码如下:

public static List<Element> readXml(String FilePath){
        BufferedReader in = null;
        List<Element> elementlist = null;
        Document doc = null;
        
        SAXReader reader = new SAXReader();
        try {
            in = new BufferedReader(new FileReader(FilePath));
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        try {
            doc = reader.read(in);
        } catch (DocumentException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        
        Element root = doc.getRootElement();
        elementlist = root.elements();
        
        return elementlist;
        
    }

遍历子节点, 读取用户名和密码的代码如下:

@SuppressWarnings("unchecked")
    public List<HashMap<String, String>> readUserDotXML(String path, String module_id){
        List<HashMap<String, String>> users = new ArrayList<HashMap<String, String>>();
        String rootPath = path;
        List<Element> list = ReadXML.readXml(rootPath);
        if (list != null) {
            for (Element ele : list) {
                String index = ele.attributeValue("id");
                if(module_id.equals(index)){
                    List<Element> userList = ele.elements();
                    if(userList != null && userList.size()>0){
                        for (Element user : userList) {
                            HashMap<String,String> hashMap = new HashMap<String, String>();
                            Element name = user.element("name");
                            Element password = user.element("password");
                            String nameValue = name.getText();
                            String passwordValue = password.getText();
                            hashMap.put("name", nameValue);
                            hashMap.put("password", passwordValue);
                            users.add(hashMap);
                        }
                    }
                    
                    break;
                }
            }
        }
        
        return users;
        
    }

main函数调用方法如下:

List<HashMap<String, String>> resultlist= readxml.readUserDotXML("e:/testXML.xml","1");

for (HashMap<String, String> hashMap : resultlist) {
    System.out.println(hashMap.get("name"));
    System.out.println(hashMap.get("password"));
}

使用java总感觉没python那么干脆,这里多几步,那里多几步的。下次对python也总结一下xml读取

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
3个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Stella981 Stella981
3年前
Android So动态加载 优雅实现与原理分析
背景:漫品Android客户端集成适配转换功能(基于目标识别(So库35M)和人脸识别库(5M)),导致apk体积50M左右,为优化客户端体验,决定实现So文件动态加载.!(https://oscimg.oschina.net/oscnet/00d1ff90e4b34869664fef59e3ec3fdd20b.png)点击上方“蓝字”关注我
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
3年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
9个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这