簡體   English   中英

使用BeanIO在單個文件中解析多個對象

[英]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

或用作參考:

如果BeanIO中的某些記錄發生異常,則繼續解析記錄

您將需要一個包含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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM