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

标签 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 类的对象。这是个好主意吗?

最佳答案

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

关于Java - 如何解析和处理复杂的XML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30450443/

相关文章:

c# - 在文件夹中搜索csv文件并插入mysql数据库

java - Groovy:如何从 AST 中获取静态推断的返回类型

Java - 构造函数是静态的吗?

java - 如何禁用和启用 android ScrollView 上的滚动?

php - 使用 PHP 将 XML feed 上传到 mysql

php - 使用php以xml格式显示mysql查询结果

Python - 如何确定已解析 XML 元素的层次结构级别?

java - 有没有办法重新注入(inject)/更新注入(inject)的 bean 字段?

sql-server - SQL 在主表中插入数据,然后在明细表中引用数据

javascript - 使用 javascript/jquery 将 CSV 拆分为对象