【发布时间】:2014-09-20 04:24:02
【问题描述】:
我正在尝试构建一个通用 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”指定为段码(实际上将其设置为会杀死解析器)。我看到 Smooks 文档也允许进行正则表达式匹配,但我不确定它是比较的,并且还没有尝试过它。
谢谢!
【问题讨论】:
-
如果所有段都在单行中(不是格式化的 EDI 文件),您是否能够读取 EDI 文件。您在此处发布的示例片段是格式化的片段。请问您可以发布您的分隔符配置吗?