我有一个复杂的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类的对象。这是个好主意吗?
答案 0 :(得分:1)
XML的预期大小是多少?如果它不是太大,您可以使用JAXB API将整个XML层次结构绑定到相关对象。这样您就不必担心创建/维护对象结构。 Jaxb将为您生成它。 一旦通过jaxb解析XML(称为unmarshalling),就会在内存中拥有对象图,您可以根据程序逻辑进行遍历。