通用 Xml/JSON 解析器(最好是 SAX 或 STAX):根据每种不同的 xml 格式通过配置文件馈送节点/xpath 信息

Generic Xml/JSON Parser(Preferrably SAX or STAX): feed node/xpath information by configuration file based on each different xml format

提问人:Sathish Kumar S 提问时间:7/20/2018 最后编辑:Sathish Kumar S 更新时间:7/20/2018 访问量:696

问:

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

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

示例(XML DATA):

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: str Employee_mark: int Employee_org: str Employee_org_Payroll: boolean Employee_extras:对象/数组}

数据:

{
        {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/.../etc),加载该 xml 格式的相应配置文件,对其进行处理并写入通用/通用 xml 输出格式。

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

谢谢你的进步!

Java XML XML 解析 Sax Stax

评论

0赞 Kayaman 7/20/2018
为什么你的XML实际上是JSON?
0赞 Sathish Kumar S 7/20/2018
是的。这是我的错误,我们对 XML 和 JSON 都有要求。让我更新一下问题。
0赞 Sathish Kumar S 7/20/2018
我添加了适当的 xml 示例数据、格式和该示例数据的输出。
0赞 Vadzim 6/5/2019
另请参阅 是否有读取 json 并触发事件的 SaxParser 使其看起来像 xml

答:

0赞 Sathish Kumar S 7/20/2018 #1

最后,我找到了这段代码,它主要为我的问题提供了解决方案,唯一的问题是我需要工作是否使用 for 或 HashMap。

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