解析深层嵌套数据的XML

时间:2013-06-12 01:34:05

标签: java dom xml-parsing jaxb nested

我有一个XML文件,其结构如下:

<element1>
    <element2>
        <element3>
            <elementIAmInterestedIn attribute="data">
                <element4>
                    <element5>
                        <element6>
                            <otherElementIAmInterestedIn>
                                <data1>text1</data1>
                                <data2>text2</data2>
                                <data3>text3</data3>
                            </otherElementIAmInterestedIn>
                        </element6>
                    </element5>
                </element4>
            </elementIAmInterestedIn>
            <elementIAmInterestedIn attribute="data">
                <element4>
                    <element5>
                        <element6>
                            <otherElementIAmInterestedIn>
                                <data1>text1</data1>
                                <data2>text2</data2>
                                <data3>text3</data3>
                            </otherElementIAmInterestedIn>
                        </element6>
                    </element5>
                </element4>
            </elementIAmInterestedIn>
            <elementIAmInterestedIn attribute="data">
                <element4>
                    <element5>
                        <element6>
                            <otherElementIAmInterestedIn>
                                <data1>text1</data1>
                                <data2>text2</data2>
                                <data3>text3</data3>
                            </otherElementIAmInterestedIn>
                        </element6>
                    </element5>
                </element4>
            </elementIAmInterestedIn>
        </element3>
    </element2>
</element1>

正如您所看到的,我对两个元素感兴趣,第一个元素深深嵌套在根元素中,第二个元素深深嵌套在第一个元素中。文档中有多个(兄弟)elementIAmInterestedIn和otherElementIAmInterestedIn元素。

我想用Java解析这个XML文件,并将来自所有elementIAmInterestedIn和otherElementIAmInterestedIn元素的数据放入数据结构或Java对象中 - 只要它有条理并且我可以访问它对我来说无关紧要它以后。

我能够编写一个递归的DOM解析器方法,该方法对XML进行深度优先遍历,以便触及每个元素。我还编写了一个Java类,其中包含代表elementIAmInterestedIn的JAXB注释。然后,在递归方法中,我可以检查何时到达elementIAmInterestedIn并将其解组为JAXB类的实例。这样可以正常工作,除了这样的对象还应该包含多个otherElementIAmInterestedIn。

这就是我被困住的地方。如何从otherElementIAmInterestedIn中获取数据并将其分配给JAXB对象?我已经看过@XmlWrapper注释,但这似乎只适用于一层嵌套。另外,我不能使用@XmlPath。

也许我应该抓住这个想法并使用一种全新的方法。我真的只是开始使用XML解析,所以也许我忽略了一个更明显的解决方案。您将如何解析这样结构化的XML文档并以有组织的方式存储数据?

1 个答案:

答案 0 :(得分:1)

也许您应该使用SAX解析器而不是DOM。当您使用DOM时,您将所有文档加载到内存中,在您的情况下,您只想读取2个字段。这是非常低效的。

使用sax解析器,您将只能读取您感兴趣的节点。这是使用SAX解析模型的任务的伪代码:

1)继续读取节点,直到获得<elementInterestedIn>节点

2)抓住你班上的那个领域

3)继续阅读,直到获得<otherElementInterestedIn>节点

4)抓住那个字段并保存对象。

从1到4循环,直到它到达文档的末尾。

如果您尝试这种方法,我建议您首先阅读本文档以了解SAX解析器的工作原理,它与DOM方法非常不同:How to Use SAX