分隔符的保留和取消

概述

有两个属性适用于带分隔符的记录: 保留空数据的分隔符取消尾随分隔符。 使用这些属性可以控制平面文件汇编程序如何处理与不存在的数据和尾随分隔符关联的分隔符。 将 “保留空数据的分隔符 ”属性设置为“ ” (这是) 默认设置时,已翻译的平面文件消息中包含分隔符:

  • 没有数据的字段。

  • 没有相关联的标记且没有数据的直接从属记录。

    “保留空数据的分隔符 ”属性设置为 “否”时,对于没有数据的记录和字段,已翻译的平面文件中不包括分隔符。 此外,无论“ 保留空数据的分隔符 ”属性的设置如何,对于没有为其定义标记的数据的直接从属记录,分隔符都不会包含在已翻译的平面文件消息中。

    “禁止尾随分隔符” 属性设置为 “否 (这是) 默认设置时,翻译的平面文件消息中可能包含一个或多个尾随分隔符。 将 “取消尾随分隔符” 属性设置为 “是”时,翻译后的平面文件消息中不包含尾随分隔符。

特殊场景

在一些特殊情况下,由保留 空数据的分隔符取消尾随分隔符 属性的设置导致的行为可能会冲突。 在这种情况下,与后一个属性( 取消尾随分隔符)关联的行为将优先。 此外,在某些特殊情况,系统将警告您为这两个属性选择的设置存在潜在冲突。

例如,考虑使用以下属性值定义的 Record 节点:

  • 节点名称为 MyRec

  • 标记标识符为 Rec

  • 子分隔符为 ,

  • 子顺序为中缀

    定义为包含五个具有以下名称的 Field 元素 节点 (它们也可以是 字段属性 节点或从属 Record 节点) :

  • FieldElem1

  • FieldElem2

  • FieldElem3

  • FieldElem4

  • FieldElem5

    接下来,假设以下主要为空的 XML 片段(表示此 Record 节点)传递给平面文件汇编程序。

<MyRec>  
    <FieldElem1 />  
    <FieldElem2 />  
    <FieldElem3>Val</FieldElem3>  
    <FieldElem4 />  
    <FieldElem5 />  
</MyRec>  
  

下表根据保留 空数据的分隔符 (PDFED) 和 禁止 (STD) 属性的不同设置,显示生成的输出以及相关架构节点的相关附加属性设置要求。

PDFED 设置 STD 设置 输出 其他节点要求
Rec,,,Val,, 无。
Rec,Val 必须将所有 Field 元素 节点配置为可选节点。
Rec,,,Val 名为 FieldElem4FieldElem5 的节点必须配置为可选。
Rec,Val,, 必须将所有 Field 元素 节点配置为可选节点。

当这些属性设置指定应不保留分隔符或应取消分隔符时,在以下两种情况下将发出一条消息,警告您可能无法使用同一架构解析序列化平面文件数据:

  • 当“保留空数据的分隔符”属性设置为“否”和/或“取消尾随分隔符”属性设置为“是”时,分别包含未指定任何标记的从属 Field 元素节点、Field Attribute 节点或 Record 节点。

  • 当未为其指定任何标记的从属 Field 元素 节点、 Field Attribute 节点和 Record 节点配置为可选时, (通过将 架构中的 Min Occurs 属性设置为零) 。 当 “取消尾随分隔符” 属性设置为 “是”时,只需将最后一个此类从属节点配置为可选。 当“ 保留空数据的分隔符” 属性设置为 “否”时,需要将所有尾随从节点配置为可选节点。

注意

当与 (关联的 XML 元素) 在业务文档的 XML 表示形式中完全缺少 RecordField ElementField Attribute 节点时,除非 Record 位于缺少的可选 Field 之后,否则始终保留分隔符。 换句话说,如果数据及其前后的 XML 标记都丢失,则在业务文档的平面文件表示形式中将始终包含相应的分隔符。

现在将该架构更改为紧随缺少的“字段元素”之后包含一个带有两个“字段元素”的子记录。 将该子记录元素配置为使用 | (管道)字符作为分隔符。

<MyRec>  
    <FieldElem1 />  
    <FieldElem2 />  
    <FieldElem3>Val</FieldElem3>  
    <!-- <FieldElem4 /> -->  
    <ChildRec>  
        <InnerFieldElement1>Inner1</InnerFieldElement1>   
        <InnerFieldElement2>Inner2</InnerFieldElement1>  
    </ChildRec>  
    <FieldElem5 />  
</MyRec>  
  

如果将其传递给平面文件拆装器,则不会保留“FieldElem4”的分隔符,但后面的记录将按预期进行分隔。

,,Val,,Inner1,Inner2,,  

另请参阅