前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >XML文件解析实践(DOM解析)

XML文件解析实践(DOM解析)

作者头像
FunTester
发布2020-10-10 09:56:32
9420
发布2020-10-10 09:56:32
举报
文章被收录于专栏:FunTesterFunTester

昨天完成了基于DOM的XML文件解析类,今天赶紧实践了一下,不得不说,实践中的坑还是很多的。

本来这个项目就是为了规范各个服务在使用MySQL数据库时候的配置项,由于之前我接触的都是Java服务,对于这些服务也算比较了解,大家的配置项基本还算是保持一致,今天解析所有服务的配置项,大开眼界。

  • 不看不知道,世界真奇妙。

首先是配置项的层级结构,一般来讲,一个root作为根节点,然后子节点都是各个服务节点,在服务节点下面是服务版本节点,然后是changeunchange两个节点,然后是具体的内容。奈何人算不如天算,算来算去不如狗带。

先看图:

zk配置截图

居然所有节点都是zknode,这是其一,在每个版本下面还有不同的配置模块,然后子节点配置具体信息。

zk配置截图

居然还有没有value的配置项,我真实要狗带了。

然后就是MySQL配置,简直刷新世界观。

下面是我从XML总的配置文件截取的内容:

代码语言:javascript
复制

                <zknode name="datadb.username" value="****"/>
                <zknode name="db.host.r" value="****"/>
                <zknode name="dbdata.host.w" value="*"/>
                <zknode name="datadb.port" value="*"/>
                <zknode name="datadb.databasev3" value="*****"/>
                <zknode name="datadb.host.w" value="*****"/>
代码语言:javascript
复制

               <zknode name="v3.db" value="******"/>
                <zknode name="v3.user" value="******"/>
                <zknode name="work.db" value="******"/>
                <zknode name="work.host" value="******"/>
                <zknode name="v3.passwd" value="******"/>
代码语言:javascript
复制
                <zknode name="DB_CONNECTION" value="******"/>
                <zknode name="DB_HOST" value="******"/>
                <zknode name="DB_DATABASE" value="******"/>
                <zknode name="DB_PASSWORD" value="******"/>
代码语言:javascript
复制
                <zknode name="mysql.DB_DATABASE" value="***"/>
                <zknode name="redis.REDIS_PORT" value="***"/>
代码语言:javascript
复制
                <zknode name="ds.druid.username" value="****"/>
                <zknode name="ds.druid.url"  value="****"/>

此处省略100种数据库配置

痛定思痛,该吐槽已经吐槽完了,活儿还是得干完的。经过不断尝试,终于完成了一种解决的脚本。

我觉得需要一个宽屏显示器了。

代码语言:javascript
复制

package com.fun.ztest.groovy

import com.fun.frame.httpclient.FanLibrary
import com.fun.utils.XMLUtil
import org.slf4j.Logger
import org.slf4j.LoggerFactory

class Td extends FanLibrary {

    private static Logger logger = LoggerFactory.getLogger(Td.class)

    public static void main(String[] args) {


        def xml = XMLUtil.parseXml("/Users/fv/Downloads/d.xml", "root")
        xml.get(0).getChildren().each {
            logger.error("服务名:{}", it.getAttrs().get(0).getValue())
            def children = it.getChildren()
            children.each {
                def attr1 = it.getAttrs()
                def name = attr1.get(0).getValue()
                if (name ==~ /[vV]\d.\d+/) {
                    logger.error("zk版本:${name}")
                    def children1 = it.getChildren()
                    children1.each {
                        def children2 = it.getChildren()
                        children2.each {
                            def attrs = it.getAttrs()
                            if (attrs.size() > 1) {
                                def var = attrs.get(0).getValue()
                                def value = attrs.get(1).getValue()
                                if (!(value ==~ /\d+/)) {
                                    if (var.contains("druid") || var.contains("db") || var.contains("user") || value.contains("mysql") || value.contains("neworiental") || value.contains("neworiental")) {
                                        if (!value.contains("{") && !value.contains(".txt") && !var.contains("service") && !var.contains("maill") && !var.contains("host") && !var.contains("driver") && !var.contains("filters") && !var.contains("center") && !var.contains("rabbit") && !var.contains("order") && !value.contains("http"))
                                            logger.info("key: {},value: {}", var, value)
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }

        testOver()
    }


}

公众号FunTester首发,原创分享爱好者,腾讯云和掘金社区首页推荐,知乎七级原创作者,欢迎关注、交流,禁止第三方擅自转载。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-09-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 FunTester 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档