2

我有一个创建一些临时 XML 的应用程序,我必须在其中解析和捕获一些信息。其中一个 XML 包含多个行,其中包含每个相关 XML 的路径。它是这样的:

<z:row TimeStamp="2012-09-25T09:58:49" FileName="\\test\app\myfile_AB.xml"/>
<z:row TimeStamp="2012-09-25T09:58:49" FileName="\\test\app\myfile_CD.xml"/>
...

我想知道是否可以使用 JAXB 解析这个“主”XML,获取所有路径,然后执行循环并在一个操作中处理每个相关的 XML。

所有的 XML 都具有大致相同的结构。

预先感谢您的任何帮助

4

2 回答 2

3

这是可能的。您必须首先定义 2 个单独的 XSD。一个是主文件的主 XSD,然后是其他所有文件的第二个 XSD。以下是主 XML 的一种建议 XML 结构

  <files>
      <z:row>
      <z:row>
      <z:row>
      .
      .
  <files>

为两个 XSD 自动生成 java pojo 类。然后,每当您收到主 XML 时,首先使用为主 XSD 自动生成的类对其进行解组。在这里,您将获得对应于根元素的对象,例如 Files.java 对象。现在在这个文件对象中迭代行对象并获取文件名。现在对于每个 FileName,再次创建单独的 unmarshaller & unmarshall 该文件及其自动生成的类。

于 2012-10-22T13:36:30.507 回答
1

我建议使用StAX (JSR-173) XMLStreamReader解析外部文档。当您前进到每个row元素时,我会让JAXB (JSR-222)实现解组内容。这消除了将整个外部文档保存在内存中的需要。

演示概念的示例

于 2012-10-22T14:26:20.843 回答