Smooks EDI解析 - 重复段

时间:2014-07-28 21:12:00

标签: java xml edi smooks

我正在尝试构建一个通用的EDI解析器,它可以处理给定文件中不存在任何情境段的情况。这很容易使用XML映射中的minOccurs="0"属性,但是当多个段重复使用相同的标记时,我很难弄清楚如何处理这个问题。例如:

CAS*PR*1*793~
NM1*QC*1*SHEPHARD*SAM*O***HN*666666666A~    --PatientName
NM1*IL*1*SHEPARD*JESSICA****HN*999887777A~  --InsuredName
MIA*0***138018.4~

使用以下XML映射:

<medi:segment segcode="NM1" xmltag="PatientNameSegment" minOccurs="0" truncatable="true">
    <medi:field xmltag="EntityIdentifierCode" />
    <medi:field xmltag="EntityTypeQualifier" />
    <medi:field xmltag="LastName" />
    <medi:field xmltag="FirstName" />
    <medi:field xmltag="MiddleName" />
    <medi:field xmltag="NamePrefix" />
    <medi:field xmltag="NameSuffix" />
    <medi:field xmltag="IdentificationCodeQualifer" />
    <medi:field xmltag="IdentificationCode" />
</medi:segment>
<medi:segment segcode="NM1" xmltag="InsuredNameSegment" minOccurs="0" truncatable="true">
    <medi:field xmltag="EntityIdentifierCode" />
    <medi:field xmltag="EntityTypeQualifier" />
    <medi:field xmltag="LastName" />
    <medi:field xmltag="FirstName" />
    <medi:field xmltag="MiddleName" />
    <medi:field xmltag="NamePrefix" />
    <medi:field xmltag="NameSuffix" />
    <medi:field xmltag="IdentificationCodeQualifer" />
    <medi:field xmltag="IdentificationCode" />
</medi:segment>

但是当从输入文件中删除患者姓名的第一行时,它只会将保险名称加载到患者姓名中,并跳过加载保险名称而不是将患者姓名留空。

基本上,我想要的就是将“NM1 * QC”指定为segcode(实际上将其设置为杀死解析器)。我看到Smooks文档也允许正则表达式匹配,但我不确定它是什么比较,并且还没有运气试验它。

谢谢!

1 个答案:

答案 0 :(得分:1)

您需要了解解析器限定符(第一个元素中的QCIL)。我不知道是否以及如何使用您的特定产品,但我确信这通常是一个基本要求。五秒钟谷歌告诉我你可以使用segcode="NM1\*IL.*",但我怀疑这是正确的做法。