使用Java以通用方式解析嵌套与平面XML元素

时间:2013-05-06 16:13:49

标签: java xml xml-parsing xsd

您好我在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或任何其他方式。我尝试过研究很多东西但却找不到任何东西。

提前致谢并希望得到解决方案或一些好的建议。

2 个答案:

答案 0 :(得分:1)

  

这是因为Address元素有时会出现嵌套和   一段时间平坦。

该陈述不正确。地址仍然嵌套在Employee元素下。在第二种情况下,它只是空的。如果你可以测试&#34;空&#34;您的通用代码中的element(没有子元素的Address元素)然后可以解决此问题。

答案 1 :(得分:1)

如果你有一个xsd,那么你可以解析xsd文件并确定哪些元素支持嵌套元素。

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