我正在尝试构建一个通用 EDI 解析器,该解析器可以在给定文件中不存在任何情境段时进行处理。这很容易使用minOccurs="0"
XML 映射中的属性,但是当多个段使用相同的标签重复时,我正在努力弄清楚如何处理这个问题。例如:
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 文档也允许进行正则表达式匹配,但我不确定它是比较的,并且还没有尝试过它的运气。
谢谢!