通用Xml/JONParser(最好是SAX或STAX):根据每个不同的Xml格式,通过配置文件提供节点/xpath信息



我写这篇文章是为了识别以下问题和解决方案的任何现有工具/代码。

需求/期望:分析30多个具有不同数据结构的不同xml日志文件,并从这些xml中填充一种通用格式。

示例(XML数据(:

XML1: <xml>
<name>abcd</name>
<mark>10</mark>
<employee_org_name>org1</employee_org_name>
<employee_payroll>true</employee_payroll>
</xml>
XML2: <xml>
<employee_name>deft</employee_name>
<score>10</score>
<org>
<name>org2</name>
<payroll>false</payroll>
</org>
</xml>
XML3: <xml>
<org name="org1">
<employee>
<name>ryan</name>
<score>10</score>
</employee>
<name>org3</name>
<payroll>true</payroll>
</org>
</xml>

XML的配置文件外观:

XML1 settings file 
Employee_name: /name
Employee_mark: /mark
Employee_org: /employee_org_name
Employee_org_Payroll: /employee_payroll
Employee_extras: anything
XML2 settings file:
Employee_name: /employee_name
Employee_mark: /score
Employee_org: /org/name
Employee_org_Payroll: /org/payroll
Employee_extras: anything
XML3 settings file: 
Employee_name: /org/employee/name
Employee_mark: /org/employee/score
Employee_org: /org:name
Employee_org_Payroll: /org/boolean
Employee_extras: anything

示例(JSON(:

JSON1: {name: "abcd", mark: "10", "employee_org_name": "org1", "employee_payroll":  "org1"}
JSON2: {employee_name: "deft", score: "10", "details": {name: "org1","payroll" "true"}}
JSON3: {"org1" : {"employee": {"name: "ryan", points: "10"}, "name": "org1","payroll" "true"}}

注意:同样的方式,我们可以有JSON配置/设置文件。

输出(应为通用格式,仅存储在JSON中(:

格式:{Employee_name:strEmployee_mark:intEmployee_org/strEmployee_org_Payroll:布尔值Employee_extras:Object/Array}

数据:

{
{Employee_name: abcd, Employee_mark: 10, Employee_org: org1, Employee_org_Payroll: true, Employee_extras: NULL},
{Employee_name: deft, Employee_mark: 10, Employee_org: org2, Employee_org_Payroll: false, Employee_extras: NULL},                         
{Employee_name: ryan, Employee_mark: 10, Employee_org: org3, Employee_org_Payroll: true, Employee_extras: NULL}
}

简单解决方案:为每个xml(1,2,3..(格式编写一个专用类或方法,并在代码级别指定节点。

(我自己(预期解决方案:编写通用解析器-当解析器触发时,加载一个xml文件,读取并理解xml格式(1/2/3/…等(,加载该xml格式的相应配置文件,对其进行处理并写入通用/通用xml输出格式。

如果我的问题或内容不清楚或需要更多信息,请告诉我。我在这里!

提前感谢您!

最后,我找到了这段代码,它主要解决了我的问题,唯一的问题是我需要确定是否使用for或HashMap。

https://github.com/niteshapte/generic-xml-parser