Java - 如何使用无限递归结构解析XML?

时间:2017-02-03 23:41:27

标签: java xml parsing recursion xml-parsing

我有一个关于xml解析的问题。

我想开发一个Java DOM解析器(或java中的任何其他解析器),它能够解析具有如下结构的xml:

<root>
    <parameters>
        <parameter> <!-- ParameterA -->
            <name>a</name>
            <values> <!-- possible values for ParameterA -->
                <value>
                    <name>a1</name>
                    <parameter> <!-- ParameterB dependent of ParameterA -->
                        <name>a11</name>
                        <values> <!--possible values for ParameterB -->
                            <value>
                                <name>a111</name>
                            </value>
                            <value>
                                <name>a112</name>
                            </value>
                        </values>
                    </parameter>
                </value>
                <value>
                    <name>a2</name>
                    <parameter> <!-- ParameterC dependent of ParameterA -->
                        <name>a22</name>
                        <values> <!--possible values for ParameterC -->
                            <value>
                                <name>a222</name>
                            </value>
                        </values>
                    </parameter>
                </value>
            </values>
        </parameter>
        <parameter> <!-- ParameterX -->
            <name>b</name>
            <values> <!-- possible values for ParameterX -->
                <value>
                    <name>b1</name>
                </value>
            </values>
        </parameter>
    </parameters>
</root>

恢复xml结构:

  • 参数具有名称和可能值列表(参数可能没有值)。
  • 值具有名称,可以包含参数。

示例

如果ParameterB依赖于ParameterA,那么,parameterA将在其value标签内部包含一个参数标签,该标签将包含有关parameterB等的信息......

我希望我的Dom Parser能够根据xml层次结构(相对于它们的值)检索所有参数组合。

对于上面的例子,Dom Parser应该返回

>> a-a1-a11-a111-b-b1
>> a-a1-a11-a112-b-b1
>> a-a2-a22-a222-b-b1

我不知道这是否有可能,我已经敲了好头几天......

谢谢,

请不要拖延建议。

1 个答案:

答案 0 :(得分:0)

你有一个递归数据结构,所以显而易见的方法是让你的DOM“解析器”递归。实际上,如果使用基于DOM的提取器,则没有其他替代方法。

但是,我认为你的问题是你试图同时做两件事:

  • 查找每个参数的所有可能值
  • 形成这些值的所有可能组合的集合

如果分别执行这两项任务,则可以更轻松地进行编码。