JDom解析xml文件

情景

解析xml配置文件,将数据库列名和Bean的属性映射。

jar包下载地址

DOM:jdk自带
标准的xml解析方式,树形加载整个xml,不适合大文件。

SAX:http://sourceforge.net/projects/sax/
事件模型xml解析方式,不需要完全加载xml,相较性能更好。

JDOM:http://jdom.org/downloads/index.html
针对java的Dom解析。

DOM4J:http://sourceforge.net/projects/dom4j/
针对java功能强大的xml解析,能够处理大文件,性能也很好,但是很复杂。

xml文件

<?xml version="1.0" encoding="UTF-8" ?>
<mapper name="vo.UserInfo">
    <property dbName="USER_NAME|user_name" fName="userName"/>
    <property dbName="ARCHIVE_ID|archive_id" fName="archiveID"/>
    <property dbName="USER_MOBILE|user_mobile" fName="userMobile"/>
    <property dbName="DEPT_NAME|dept_name" fName="userDept"/>
</mapper>

解析xml

注意: 开始解析之前一定要记着导jar包。

/**
 * JDom解析xml文件工具类
 *
 * @author fengzhen
 * @version v1.0, 2017/9/5 11:07
 */
public class JDomUtils {

    /**
     * 解析mapper类型xml文件
     *
     * @author fengzhen
     * @version v1.0, 2017/9/5 11:10
     */
    public static List<Map<String, String[]>> parseMapperAll(String fileName) throws JDOMException, IOException {
        ArrayList<Map<String, String[]>> result = new ArrayList<>();

        // 创建解析器build对象
        SAXBuilder saxBuilder = new SAXBuilder();
        // 读取xml对象
        Document userMapper = saxBuilder.build(new File("src/mapper/" + fileName));
        // 获取根节点
        Element rootElement = userMapper.getRootElement();
        // 获取根节点下所有自己节点
        List<Element> propertys = rootElement.getChildren("property");

        for (Element property :
                propertys) {
            HashMap<String, String[]> element = new HashMap<>();
            // 解析属性名
            String fName = property.getAttributeValue("fName");
            element.put("fName", new String[]{fName});
            // 解析数据库名 可能存在别名
            String dbName = property.getAttributeValue("dbName");
            element.put("dbName", dbName.split("\\|"));
            result.add(element);
        }
        return result;
    }

    /**
     * 解析mapper类型xml文件
     *
     * @author fengzhen
     * @version v1.0, 2017/9/5 11:10
     */
    public static String parseMapperModel(String fileName) throws JDOMException, IOException {

        // 创建解析器build对象
        SAXBuilder saxBuilder = new SAXBuilder();
        // 读取xml对象
        Document userMapper = saxBuilder.build(new File("src/mapper/" + fileName));
        // 获取根节点
        Element rootElement = userMapper.getRootElement();
        return rootElement.getAttributeValue("name");
    }

结果展示

调用解析方法解析文件

try {
     List<Map<String, String[]>> maps = JDomUtils.parseMapperAll("UserMapper.xml");
     for (Map<String, String[]> map :
             maps) {
         System.out.println("dnName:"+map.get("dbName")[0]+" fName:"+map.get("fName")[0]);
     }
 } catch (JDOMException | IOException e) {
     e.printStackTrace();
 }

结果:为了简单,这里只取第一个值,别名没有进行展示

dnName:USER_NAME  fName:userName
dnName:ARCHIVE_ID  fName:archiveID
dnName:USER_MOBILE  fName:userMobile
dnName:DEPT_NAME  fName:userDept
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值