1

我正在尝试构建一个通用 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 文档也允许进行正则表达式匹配,但我不确定它是比较的,并且还没有尝试过它的运气。

谢谢!

4

1 回答 1

2

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

于 2014-07-28T21:22:36.640 回答