我在文件中有以下两种类型的记录,我可以使用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
mapping.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>
Update1:我们可以使用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
答案 0 :(得分:0)
您好我在BeanIO解析器中遇到了同样的问题。我只是在
中使用minOccurs =“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中存储默认类型值。
这是我的Drive Link示例,只需使用它:
https://drive.google.com/drive/folders/1SFSEWUVpSaAFHgYxR1PExCscimMtWpwf?usp=sharing
或用作参考:
Continue parsing of records if exception occurs on some record in BeanIO
答案 1 :(得分:0)
您需要一个包含Employee
条记录
public class EmployeeGroup {
private List<Employee> employees;
// getter + setter
}
然后,您需要group
中的mapping.xml
定义才能阅读所有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
属性的值,以标识不同的记录。