我在一个文件中有以下 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.xml
中group
定义来读取所有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 中的某些记录发生异常,则继续解析记录