共用方式為


泛空白字元 [XML 標準]

全球資訊網協會 (W3C) XML 規格可將不同的行尾慣例正規化成單一慣例,但保留其他所有泛空白字元 (屬性值除外)。XML 也提供一組可供文件用來通知應用程式保留泛空白字元的一組工具。

泛空白字元及 XML 宣告

根據目前的 XML 1.0 標準,XML 宣告前面不能有泛空白字元。

<?xml version="1.0"?>
 <BOOK>
  <BOOKNAME>XML</BOOKNAME>
 </BOOK>

如果 XML 宣告前面有泛空白字元,則會將泛空白字元視為處理指示。剖析器可能無法使用資訊 (特別是在編碼時)。

如需 XML 宣告的詳細資訊,請參閱 XML 宣告

項目內容中的泛空白字元

需要使用 XML 剖析器,才能報告出現在文件內部之項目內容中的所有泛空白字元。因此,下列三份文件對 XML 剖析器而言是不同的。

<document>
<data>1</data>
<data>2</data>
<data>3</data>
</document>

以及:

<document><data>1</data><data>2</data><data>3</data></document>

以及:

<document><data>1</data> <data>2</data> <data>3</data></document>

對部分應用程式而言,這三個資料值比美觀的列印更重要。對以文件為導向的 XML 應用程式而言,保留泛空白字元是很重要的。

文件作者可使用 xml:space 屬性來識別對該部分而言,空白字元是很重要的文件部分。樣式表也可以使用 xml:space 屬性來保留展示的空白字元。不過,由於許多 XML 應用程式並不了解xml:space 屬性,因此請小心使用。

xml:space 屬性可接受兩個值。

  • default
    此值允許應用程式視需要處理泛空白字元。不加入 xml:space 屬性與使用 default 值會產生相同的結果。

  • preserve
    此值會指示應用程式保留泛空白字元原狀,使應用程式認為這是有意義的值。

xml:space 屬性的值會套用至內含屬性之項目的所有子代 (除非該子代已由其中一個子項目覆寫)。

例如,下列文件將指定相同的泛空白字元行為。

<poem xml:space="default">
<author>
<givenName>Alix</givenName>
<familyName>Krakowski</familyName>
</author>
<verse xml:space="preserve">
<line>Roses   are  red,</line>
<line>Violets  are  blue.</line>
<signature xml:space="default">-Alix</signature>
</verse>
</poem>

以及:

<poem xml:space="default">
<author xml:space="default">
<givenName xml:space="default">Alix</givenName>
<familyName xml:space="default">Krakowski</familyName>
</author>
<verse xml:space="preserve">
<line xml:space="preserve">Roses   are  red,</line>
<line xml:space="preserve">Violets  are  blue.</line>
<signature xml:space="default">-Alix</signature>
</verse>
</poem>

在這兩個範例中,系統會通知應用程式,請其務必保留詩行的所有泛空白字元,但可視需要處理文件其他部分的泛空白字元。

如同其語言所指示的對應用法 xml:lang,如果是在驗證環境中使用 xml:space 屬性,則必須在文件類型定義 (DTD) 中宣告該屬性。不需要宣告 XML 命名空間,因為 XML 規格將保留該命名空間。

在預設狀況下,Microsoft XML Core Services (MSXML) 不接受 xml:space 屬性。如果應用程式必須接受 xml:space 屬性,則也必須先將 DOMDocument 物件的 preserveWhiteSpace 屬性設為 True,才能執行剖析。

xmldoc= new ActiveXObject("Msxml2.DOMDocument.5.0");

xmldoc.preserveWhiteSpace = true;

xmldoc.load(url);

MSXML 也提供了許多設定,可讓您將應用程式泛空白字元處理委派給剖析器。如需詳細資訊,請參閱 MSXML SDK 文件中的<泛空白字元及 DOM>主題。

注意

由於保留項目之間的泛空白字元節點將帶來極大的負荷量,因此保留泛空白字元資訊可能會大幅增加「文件物件模式 (DOM)」樹狀目錄的大小。

屬性中的泛空白字元

雖然 XML 處理器可保留項目內容中的所有泛空白字元,但它們經常是在屬性值中正規化泛空白字元。系統會將索引標籤、歸位字元和空格報告成單一空格。在某些屬性型別中,它們會修剪值的主要本文前面或後面的泛空白字元,並將值內的泛空白字元縮減為單一空格 (如果能使用 DTD,則會在其型別不是 CDATA 的所有屬性上執行這項修剪)。

例如,XML 文件可能包含下列程式碼行:

<whiteSpaceLoss note1="this is a note." note2="this
is
a
note.">

XML 剖析器可將這兩個屬性值報告成 "this is a note.",並將分行符號轉換成單一空格。

**注意:**MSXML3 中的 DOM 或 SAX 都不會正規化空白字元。MSXML6 中的 DOM 不會正規化空白字元,但是 SAX 會。

若文件有 DTD,則會移除其宣告之型別不是 CDATA 的屬性值開頭與結尾的空格;並且會以單一空格取代值內的所有泛空白字元叢集。如果沒有 DTD,剖析器會假設所有屬性的型別都是 CDATA。

行尾處理

XML 處理器會將字元序列「歸位字元-換行字元 (CRLF)」視為類似單一 CR 或 LF 字元。系統會將它們全部報告為單一 LF 字元。應用程式可使用適當的行尾轉換慣例來儲存文件。