我正在尝试为包含多个重复段的固定长度文件创建映射文件。问题是,这些片段中的多个片段被无限次重复,beanio 不支持平面文件。我理解,这是有充分理由的,因为 beanio 只能对片段重复的频率做这么多的猜测。
然而,每个段的重复次数存在于文件中,在重复段发生之前的位置,所以我试图弄清楚是否有办法从流中读取该数字,然后填充“minOccurs”和具有正确值的以下段的“maxOccurs”属性。基本上我的映射文件看起来像:
<beanio>
<stream name="employeeFile" format="fixedlength">
<record name="record1" class="example.Record1">
<field name="field1" length="10"/>
<field name="field2" length="2"/>
<field name="length1" length="2"/>
<segment name="list1" collection="list" minOccurs="1" maxOccurs="unbounded" class="example.List1">
...
</segment>
<field name="length2" length="2"/>
<segment name="list2" collection="list" minOccurs="1" maxOccurs="unbounded" class="example.List2">
...
</segment>
</record>
</stream>
</beanio>
我现在需要一些方法来使用字段 length1 和 length2 的值作为段中的“maxOccurs”属性。我相当肯定没有“官方”的方式来获得这种行为,但到目前为止我还没有想出一个更优雅的解决方案。
我的一个想法是创建一个程序,从文件中加载每个段的重复次数,然后在映射文件上执行搜索替换,然后在 beanio 中加载它,但这似乎是一种非常复杂的做事方式.
谢谢,松克