我有一个复杂的 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 类的对象。这是个好主意吗?
最佳答案
XML 的预期大小是多少?如果不是太大,可以使用 JAXB用于将整个 XML 层次结构绑定(bind)到相关对象的 API。这样您就不必担心创建/维护对象结构。 Jaxb 将为您生成它。 一旦通过 jaxb 解析 XML(称为解码),内存中就有了对象图,您可以根据程序逻辑进行遍历。
关于Java - 如何解析和处理复杂的XML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30450443/