XML 檔案解析實踐 (DOM 解析)
昨天完成了基於DOM的XML檔案解析類,今天趕緊實踐了一下,不得不說,實踐中的坑還是很多的。
本來這個專案就是為了規範各個服務在使用MySQL
資料庫時候的配置項,由於之前我接觸的都是Java
服務,對於這些服務也算比較瞭解,大家的配置項基本還算是保持一致
,今天解析所有服務的配置項,大開眼界。
- 不看不知道,世界真奇妙。
首先是配置項的層級結構,一般來講,一個root
作為根節點,然後子節點都是各個服務節點,在服務節點下面是服務版本節點,然後是change
和unchange
兩個節點,然後是具體的內容。奈何人算不如天算,算來算去不如狗帶。
先看圖:
居然所有節點都是zknode
,這是其一,在每個版本下面還有不同的配置模組,然後子節點配置具體資訊。
居然還有沒有value
的配置項,我真實要狗帶了。
然後就是MySQL
配置,簡直重新整理世界觀。
下面是我從XML
總的配置檔案擷取的內容:
<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="*****"/>
<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="******"/>
<zknode name="DB_CONNECTION" value="******"/>
<zknode name="DB_HOST" value="******"/>
<zknode name="DB_DATABASE" value="******"/>
<zknode name="DB_PASSWORD" value="******"/>
<zknode name="mysql.DB_DATABASE" value="***"/>
<zknode name="redis.REDIS_PORT" value="***"/>
<zknode name="ds.druid.username" value="****"/>
<zknode name="ds.druid.url" value="****"/>
此處省略100種資料庫配置
痛定思痛,該吐槽已經吐槽完了,活兒還是得幹完的。經過不斷嘗試,終於完成了一種解決的指令碼。
我覺得需要一個寬屏顯示器了。
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首發,原創分享愛好者,騰訊雲和掘金社群首頁推薦,知乎七級原創作者,歡迎關注、交流,禁止第三方擅自轉載。
FunTester熱文精選
相關文章
- 基於 DOM 的 XML 檔案解析類XML
- python XML 檔案解析PythonXML
- jdom解析xml檔案XML
- Python XML解析之DOMPythonXML
- 使用 Java 解析XML檔案JavaXML
- XML DOM 解析器概述XML
- Python解析XML檔案生成HTMLPythonXMLHTML
- mybatis原始碼配置檔案解析之五:解析mappers標籤(解析XML對映檔案)MyBatis原始碼APPXML
- XML DOM 解析器錯誤概述XML
- springMVC---配置檔案解析(web.xml)SpringMVCWebXML
- c#(解析xml檔案基礎方法)C#XML
- 如何使用 ABAP 程式碼解析 XML 檔案XML
- java的XML解析(DOM4J技術)JavaXML
- mybatis的全域性配置檔案SqlMapConfig.xml解析MyBatisSQLXML
- DOM4J 解析 XML 之忽略轉義字元XML字元
- 使用JAXP對xml文件進行DOM解析基礎XML
- Xml解析XML
- ie中jQuery無法解析xml檔案的解決方案jQueryXML
- Java解析XMLJavaXML
- go 解析xmlGoXML
- iOS – XML解析iOSXML
- Class檔案解析
- eml檔案解析
- Android學習筆記之AndroidManifest.xml檔案解析(詳解)Android筆記XML
- 死磕Spring之IoC篇 - 解析自定義標籤(XML 檔案)SpringXML
- 死磕Spring之IoC篇 - BeanDefinition 的解析階段(XML 檔案)SpringBeanXML
- 實用解析dmp檔案內容
- DOM 常用 API 解析API
- 使用jaxp解析器dom方式對xml節點進行操作XML
- dom解析和sax解析的區別
- 解析XML檔案時,無效的XML 字元 (Unicode: 0x7)異常處理XML字元Unicode
- python之XML解析PythonXML
- 175.XML解析XML
- C# XML解析C#XML
- Golang 實現 Redis(11): RDB 檔案解析GolangRedis
- java class檔案解析Java
- BVH檔案格式解析
- 使用DOM解析來實現PHP模版引擎PHP