使用 BeanIO 在单个文件中解析多个对象



我在一个文件中有以下 2 种类型的记录,我可以使用 BeanIO 解析此文件以获取任何一种记录类型 1 或 2,但我无法在单个解析器中同时执行这两种记录。我不知道如何在单个记录中使用我的两个映射。请给我你的指导。谢谢。

1   Length(20)    5       5        5      5      5
    Columns     S.No    Name    Street  City    Zip
2   Columns     S.No    Age Position        
    Length(20)    5      2   18 

映射.xml

<record name="employee" class="com.Employee" collection="list" minOccurs="1" maxOccurs="unbounded">
<field name="S.No" length="5" />
<field name="Name" length="5" />
<field name="Street" length="5" />
<field name="City" length="5" />
<field name="Zip" length="5" />
</record>
<record name="employee" class="com.Employee" collection="list" minOccurs="1" maxOccurs="unbounded">
<field name="S.No" length="5" />
<field name="Age" length="2" />
<field name="Position" length="12" />
</record>

更新1:我们可以使用 S.No 来区分记录没有记录顺序,记录之间也没有依赖关系。

    001  Jose Str1 City 56005
    001  Hene Str1 City 66005
    005  20 General Manager  
    001  King Str1 City 76005
    005  20 General Manager  
    001  Leo  Str1 City 86005
    005  90 COO                
    005  70 Deputy Manager
您需要

有一个包含Employee记录列表的类

public class EmployeeGroup {
  private List<Employee> employees;
  // getter + setter
}

然后,您需要在mapping.xmlgroup定义来读取所有Employee记录

<stream name="example" format="fixedlength">
  <group name="employeeGroup" class="com.EmployeeGroup">
    <record name="employees" class="com.Employee" minOccurs="1" maxOccurs="unbounded" collection="list">
      <field name="S.No" length="5" rid="true" literal="001"/>
      <field name="Name" length="5"/>
      <field name="Street" length="5"/>
      <field name="City" length="5"/>
      <field name="Zip" length="5"/>
    </record>
    <record name="employees" class="com.Employee" minOccurs="1" maxOccurs="unbounded" collection="list">
      <field name="S.No" length="5" rid="true" literal="005"/>
      <field name="Age" length="2"/>
      <field name="Position" length="12"/>
    </record>
  </group>
</stream>

记下 literal 属性的值以标识不同的记录。

嗨,

我在 BeanIO 解析器中遇到了同样的问题。我只是在 minHappen="0" 中使用

执行以下操作:

不要使用两个,只需使用一个,例如:

<record name="employee" class="com.Employee" collection="list" minOccurs="1" maxOccurs="unbounded">
<field name="S.No" length="5"/>
<field name="Name" length="5" minOccurs="0"/>
<field name="Street" length="5" minOccurs="0"/>
<field name="City" length="5" minOccurs="0"/>
<field name="Zip" length="5" minOccurs="0"/>
<field name="Age" length="2" minOccurs="0"/>
<field name="Position" length="12" minOccurs="0"/>

如果某个字段中没有记录,则它将默认类型值存储在POJO/Bean中。

这是我的驱动器链接示例 只需使用它:

https://drive.google.com/drive/folders/1SFSEWUVpSaAFHgYxR1PExCscimMtWpwf?usp=sharing

或用作参考:

如果 BeanIO 中的某些记录发生异常,则继续解析记录

相关内容

  • 没有找到相关文章

最新更新