有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

您好,我用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) 个答案

  1. # 1 楼答案

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

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

  2. # 2 楼答案

    This happens because Address element is present sometime as nested and some time as flat.

    这种说法是不正确的。Address仍然嵌套在Employee元素下。在第二种情况下,它只是空的。如果可以在泛型代码中测试“empty”元素(没有子元素的Address元素),那么这个问题就可以解决