Java - 如何解析和处理复杂的XML

时间:2015-05-26 05:51:24

标签: java xml parsing process config

我有一个复杂的XML文件,其中包含将要解析的配置信息。一个例子:

<Rule>
<ID></ID>
<Center>
    <MethodCall>
        <Package></Package>
        <Method>
            <Pattern></Pattern>
        </Method>
        <Parameters>
            <ParametersCount>
                <Number>0,1-2,6+</Number>
            </ParametersCount>
            <Parameter>
                <Package></Package>
                <Position></Position>
                <Const>
                    <Number></Number>
                </Const>
            </Parameter>
        </Parameters>
    </MethodCall>
</Center>
<Conditions>
    <Or>
        <Parameter>
            <Position>1</Position>
            <Package>com.test1</Package>
        </Parameter>
        <Parameter>
            <Position>1</Position>
            <Package>com.test2</Package>
        </Parameter>
    </Or>
</Conditions>
</Rule>

AST分析器的配置。代码将通过center标记内的规则找到,稍后它将由conditions规则解析。通过如何处理?我有两个想法:

1)为每个标签(参数,包,方法等)创建很多类,然后读取这些对象中的规则并在我的程序中处理它。

2)在处理代码时使用Element并解析XML规则。

UPD:我会澄清我的需求。试想一下,你有很多应该处理的选项。在示例的情况下,MethodCall可能不包含一些选项,并且解析器应该获取相应的对象(因此,如果它不包含Package,Method,则应该找到任何方法调用),但是在找到之后,它将会如果它满足Conditions标签内的条件,请进行检查。这里面的问题。我不知道如何存储此配置信息。例如,我们得到了一个方法调用,在条件中我们有两个参数选项,如代码中,以及如何验证这个?创建一个条件列表(但我们需要有一个链表,因为我们有像Not,Or和And这样的逻辑运算符),如List<Object>,但这些对象是Parameter / ParametersCount / MethodName / PackageName / etc类的对象。这是个好主意吗?

1 个答案:

答案 0 :(得分:1)

XML的预期大小是多少?如果它不是太大,您可以使用JAXB API将整个XML层次结构绑定到相关对象。这样您就不必担心创建/维护对象结构。 Jaxb将为您生成它。 一旦通过jaxb解析XML(称为unmarshalling),就会在内存中拥有对象图,您可以根据程序逻辑进行遍历。