我在一个文件中有以下两种类型的记录,我可以使用 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
属性的值以标识不同的记录。
关于java - 使用 BeanIO 在单个文件中解析多个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48267155/