保留和隱藏分隔符號

概觀

有兩個屬性適用于分隔的記錄: 保留空白資料的分隔符號隱藏尾端分隔符號。 使用這些屬性來控制一般檔案組合器如何處理與不存在的資料和尾端分隔符號相關聯的分隔符號。 當您將 [ 空白資料保留分隔符號] 屬性設定為 [是 ] (這是預設設定) 時,分隔符號會包含在翻譯的一般檔案訊息中:

  • 沒有資料的欄位。

  • 沒有資料也沒有關聯標記的直接附屬記錄。

    當您將 [空白資料保留分隔符號] 屬性設定為 [否] 時,分隔符號不會包含在翻譯的一般檔案中,記錄和欄位沒有資料。 此外,不論 [ 保留分隔符號 For Empty Data ] 屬性的設定為何,分隔符號都不會包含在轉譯的一般檔案訊息中,而不會立即包含標記定義的資料。

    當您將 [隱藏尾端分隔符號 ] 屬性設定為 [否 ] (這是預設設定) 時,一或多個尾端分隔符號可能會包含在轉譯的一般檔案訊息中。 當您將 [隱藏尾端分隔符號 ] 屬性設定為 [是] 時,尾端分隔符號不會包含在翻譯的一般檔案訊息中。

特殊案例

在某些情況下, 保留分隔符號的 設定和 隱藏尾端分隔符號 屬性的行為可能會衝突。 在這種情況下,與後者屬性 「隱藏尾端分隔符號」相關聯的行為會優先。 此外,在某些特殊情況下,若您為這兩個屬性所選擇的設定可能互相衝突時,則會提出警告。

例如,請考慮使用下列屬性值定義的 Record 節點:

  • 節點名稱為 MyRec

  • 標記識別項為 Rec

  • 子分隔符號為 ,

  • 子系順序為 Infix

    並定義為包含具有下列名稱的五個 Field Element 節點, (它們也可以是 欄位屬性 節點或次級 Record 節點) :

  • FieldElem1

  • FieldElem2

  • FieldElem3

  • FieldElem4

  • FieldElem5

    接下來,假設下列主要空白 XML 片段,代表此 Record 節點,會傳遞至一般檔案組合器。

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

下表顯示產生的輸出,以及相關架構節點的相關其他屬性設定需求,根據保留 分隔符號的空白資料 (PDFED) 和 隱藏尾端分隔 符 (STD) 屬性的不同設定。

PDFED 設定 STD 設定 輸出 其他節點需求
No Rec,,,Val,, 無。
No Yes Rec,Val 所有 Field Element 節點都必須設定為選擇性。
Yes Yes Rec,,,Val 名為 FieldElem4FieldElem5 的節點必須設定為選擇性。
No No Rec,Val,, 所有 Field Element 節點都必須設定為選擇性。

當這些屬性設定指定分隔符號不能保留或應該隱藏時,會在下列兩種情況下發出訊息,警告可能無法使用相同的結構描述剖析序列化的一般檔案資料:

  • [保留空白資料分隔符號保留分隔符號]屬性設定為[否] 和/或 [隱藏尾端分隔符號] 屬性分別設為 [] 時,會分別包含未指定任何標記的次級Field Element節點、欄位屬性節點或Record節點。

  • 當次級 Field 元素 節點、 欄位屬性 節點和未指定標記的 記錄 節點未設定為選擇性 (時,請將架構中的 Min Occurs 屬性設定為零) 。 當 [隱藏尾端分隔符號 ] 屬性設定為 [是] 時,只需要將最後一個這類次級節點設定為選擇性。 當 [空白資料保留分隔符號] 屬性設定為 [否] 時,所有尾端的次級節點都必須設定為選擇性。

注意

當與 (關聯的 XML 元素可能選擇性) RecordField ElementField Attribute 節點完全遺漏商務檔的 XML 標記法時,一律會保留分隔符號,除非 Record 遵循遺漏的選擇性欄位時。 也就是說,當資料和括住它的 XML 標記都遺失時,對應的分隔符號永遠都會包含在商務文件的一般檔案表示法中。

現在請變更結構描述,以兩個欄位項目 (緊接在遺失的欄位項目之後) 包含子記錄。 子記錄項目設定為使用 | (管線) 字元做為分隔符號。

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

如果此記錄被傳遞給一般檔案解譯器,將不會保留 FieldElem4 的分隔符號,但是會如預期地分隔後續的記錄。

,,Val,,Inner1,Inner2,,  

另請參閱