[英]Multiple Objects parsing in single file using BeanIO
我在文件中有以下兩種記錄類型,我可以使用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區分記錄。否記錄沒有順序,記錄之間也沒有依賴關系。
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中。
這是我的Drive Link示例,只需使用它:
https://drive.google.com/drive/folders/1SFSEWUVpSaAFHgYxR1PExCscimMtWpwf?usp=sharing
或用作參考:
您將需要一個包含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
屬性的值以標識不同的記錄。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.