使用 BeanIO 在单个文件中解析多个对象
Multiple Objects parsing in single file using BeanIO
我在一个文件中有以下 2 种类型的记录,我可以使用 BeanIO 解析此文件以获取记录类型 1 或 2 中的任何一种,但我无法在一个 parsor.I 中同时完成这两种记录'知道如何在单个记录中使用我的两个映射。请指导我做it.Thanks.
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
您好,我在 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中。
这是我的驱动器示例 Link 只需使用它:
https://drive.google.com/drive/folders/1SFSEWUVpSaAFHgYxR1PExCscimMtWpwf?usp=sharing
或用作参考:
Continue parsing of records if exception occurs on some record in BeanIO
您需要一个 class 包含您的 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
属性的值以识别不同的记录。
我在一个文件中有以下 2 种类型的记录,我可以使用 BeanIO 解析此文件以获取记录类型 1 或 2 中的任何一种,但我无法在一个 parsor.I 中同时完成这两种记录'知道如何在单个记录中使用我的两个映射。请指导我做it.Thanks.
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
您好,我在 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中。
这是我的驱动器示例 Link 只需使用它:
https://drive.google.com/drive/folders/1SFSEWUVpSaAFHgYxR1PExCscimMtWpwf?usp=sharing
或用作参考:
Continue parsing of records if exception occurs on some record in BeanIO
您需要一个 class 包含您的 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
属性的值以识别不同的记录。