【发布时间】:2013-05-06 16:13:48
【问题描述】:
您好,我用 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 或任何其他方式。我尝试研究很多东西,但无法弄清楚任何东西。
提前致谢,希望能得到解决方案或一些好的建议。
【问题讨论】:
-
@AndrewThompson:这只是我用来解释我面临的问题的一个虚拟示例。没有想过这个。感谢您指出,但如果您有任何解决原始问题的想法,请告诉我。
-
你提到“XSD”,你有xml的xsd吗?如果是这样,那么是的,您可以解决问题。如果没有,从一般意义上来说,你将很难解决这个问题。
-
如果我有 XML 文件的 XSD,你能告诉我如何解决这个问题吗?请告诉我解决方案,仅当您建议我应该阅读完整的 XML 文件一次,在我的代码中以某种方式访问它的结构,但我的通用解析代码不会是通用的。因为当我尝试处理新的 XML 时,我需要对代码进行更改,以免我的代码变得通用。
-
我确实在下面的回答中解释了我的评论。
-
xsd 是一个有据可查的规范...
标签: java xml xml-parsing xsd