0

嗨,我用 Java 编写了一个通用代码,它在不知道其结构的情况下解析 XML 输入文件并以逗号分隔值输出值。因此,假设我的 XML 文档中有以下内容:

<Employee>
    <Name>XYZ</Name>
    <Id>123</Id> 
    <Address>
         <Office_Address>office address here</Office_Address>
    </Address>
</Employee>

所以现在我的 Java 代码将上面的 xml 文件解析为逗号分隔值:

Employee (File 1):  Name , ID
Address (File 2):  Office_Address

也就是说,对于每个嵌套元素,其输出一个新的 csv 文件,其中的列等于其子节点。

所以这工作正常,但现在问题是:让我拥有与上述相同的 XML 文件:

 <Employee>
    <Name>XYZ</Name>
    <Id>123</Id> 
    <Address/>
</Employee>

因此,在这种情况下,当我的通用 Java 代码处理此文件时,它会输出为:

Employee (File 1) : Name, Id, Address

因此,我得到一个而不是两个输出文件,而文件 1 有时有 3 个条目而不是 2。发生这种情况是因为 Address 元素有时是嵌套的,有时是扁平的。因此,当它嵌套时,Java 代码会创建一个与之对应的新逗号分隔,但当它不嵌套时,它只会输出一个文件。

我可以通过硬编码这个元素的逻辑来解决这个问题。但我不想这样做,因为我的 Java 通用 XML 解析代码没有意义。

所以我的问题是,我们可以通过任何方式找出从相同源生成的 XML 文件中的元素可能以嵌套形式存在,有时以平面形式存在。使用 XSD 或任何其他方式。我尝试研究很多东西,但无法弄清楚任何东西。

在此先感谢并希望得到解决方案或一些好的建议。

4

2 回答 2

1

如果您有 xsd,则可以解析 xsd 文件并确定哪些元素支持嵌套元素。

如果您没有 xsd,那么您基本上必须解析整个 xml 文件一次以确定所有可能的嵌套(即您基本上是在检查 xml 文件以构建您自己的 xsd),然后再次将其解析为实际根据您从第一遍获得的知识输出最终结果。

于 2013-05-06T16:59:32.687 回答
1

发生这种情况是因为 Address 元素有时是嵌套的,有时是扁平的。

这种说法是不正确的。Address 仍然嵌套在 Employee 元素下。在第二种情况下,它只是空的。如果您可以在通用代码中测试“空”元素(没有子元素的地址元素),则可以解决此问题。

于 2013-05-06T16:22:24.970 回答