文件解析配置
在项目中实际开发中,经常在批处理模块生成或解析不同格式的文件,下面简单介绍下不同格式文件的解析配置
【案例一】行尾没有结束符号
文件格式:业务编号|交易日期|姓名|账号|交易金额|交易状态|交易结果
解析配置:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE Group SYSTEM "packetutf8.dtd">
<segment>
<idxField name="List">
<var type="FUNIX">
<segment>
<varString name="BizNo" type="D|" encoding="UTF-8"/><!-- 业务编号 -->
<varString name="TransDate" type="D|" encoding="UTF-8"/><!-- 交易时间 -->
<varString name="Name" type="D|" encoding="UTF-8"/><!-- 客户姓名-->
<varString name="PayerAcNo" type="D|" encoding="UTF-8"/><!-- 银行卡号 -->
<varString name="Amount" type="D|" encoding="UTF-8"/><!-- 交易金额 -->
<varString name="Status" type="D|" encoding="UTF-8"/><!-- 批扣结果-->
<String name="Message" defaultValue="" encoding="UTF-8"/><!-- 备注 -->
</segment>
</var>
</idxField>
</segment>
【案例二】行尾有结束符号
文件格式:业务编号|交易日期|姓名|账号|交易金额|交易状态|交易结果|
解析配置:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE Group SYSTEM "packetutf8.dtd">
<segment>
<idxField name="List">
<var type="FUNIX">
<segment>
<varString name="BizNo" type="D|" encoding="UTF-8"/><!-- 业务编号 -->
<varString name="TransDate" type="D|" encoding="UTF-8"/><!-- 交易时间 -->
<varString name="Name" type="D|" encoding="UTF-8"/><!-- 客户姓名-->
<varString name="PayerAcNo" type="D|" encoding="UTF-8"/><!-- 银行卡号 -->
<varString name="Amount" type="D|" encoding="UTF-8"/><!-- 交易金额 -->
<varString name="Status" type="D|" encoding="UTF-8"/><!-- 批扣结果-->
<varString name="Message" type="D|" encoding="UTF-8"/><!-- 备注 -->
</segment>
</var>
</idxField>
</segment>
【案例三】文件分割符号自定义,比如分隔符为<f>
业务编号<f>交易日期<f>姓名<f>账号<f>交易金额<f>交易状态<f>交易结果<f>
解析配置:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE Group SYSTEM "packetutf8.dtd">
<segment>
<idxField name="List">
<var type="FUNIX">
<segment>
<varString name="BizNo" type="D0x3c" encoding="UTF-8"/><!-- 业务编号 -->
<varString name="" type="Df" encoding="UTF-8"/>
<varString name="" type="D0x3E" encoding="UTF-8"/>
<varString name="TransDate" type="D0x3c" encoding="UTF-8"/><!-- 交易时间 -->
<varString name="" type="Df" encoding="UTF-8"/>
<varString name="" type="D0x3E" encoding="UTF-8"/>
<varString name="Name" type="D0x3c" encoding="UTF-8"/><!-- 客户姓名-->
<varString name="PayerAcNo" type="D0x3c" encoding="UTF-8"/><!-- 银行卡号 -->
<varString name="" type="Df" encoding="UTF-8"/>
<varString name="" type="D0x3E" encoding="UTF-8"/>
<varString name="Amount" type="D0x3c" encoding="UTF-8"/><!-- 交易金额 -->
<varString name="" type="Df" encoding="UTF-8"/>
<varString name="" type="D0x3E" encoding="UTF-8"/>
<varString name="Status" type="D0x3c" encoding="UTF-8"/><!-- 批扣结果-->
<varString name="" type="Df" encoding="UTF-8"/>
<varString name="" type="D0x3E" encoding="UTF-8"/>
<varString name="Message" type="D0x3c" encoding="UTF-8"/><!-- 备注 -->
<varString name="" type="Df" encoding="UTF-8"/>
<varString name="" type="D0x3E" encoding="UTF-8"/>
</segment>
</var>
</idxField>
</segment>
分隔符一般都用16进制ASCII码表示,例如$:D0x24, <:D0x3c ASCII码详细如下图
【案例四】超过1000条记录,解析后的数据自动截断,只保留一千条
我们经常遇到这种情况,批量文件记录数大于1000条,解析后取list数据时发现只能拿到1000条记录,可增加maxLoop属性控制
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE Group SYSTEM "packetutf8.dtd">
<segment>
<idxField name="List" ignoreException="true" maxLoop="50000">
<var type="FUNIX">
<segment>
<varString name="BizNo" type="D|" encoding="UTF-8"/><!-- 业务编号 -->
<varString name="TransDate" type="D|" encoding="UTF-8"/><!-- 交易时间 -->
<varString name="Name" type="D|" encoding="UTF-8"/><!-- 客户姓名-->
<varString name="PayerAcNo" type="D|" encoding="UTF-8"/><!-- 银行卡号 -->
<varString name="Amount" type="D|" encoding="UTF-8"/><!-- 交易金额 -->
<varString name="Status" type="D|" encoding="UTF-8"/><!-- 批扣结果-->
<String name="Message" defaultValue="" encoding="UTF-8"/><!-- 备注 -->
</segment>
</var>
</idxField>
</segment>
by CSII@王大仙