<xsl:preserve-space> 元素
保留可能會顯示在 elements 屬性所指定之項目中的僅含泛空白字元文字節點。
<xsl:preserve-space
elements = tokens />
屬性
- 項目
這是必要的屬性。 此值為僅含泛空白字元文字節點必須保留之節點的名稱語彙基元清單 (以泛空白字元分隔)。
項目資訊
發生次數 |
無限制 |
父項目 |
|
項目子系 |
(沒有項目子系) |
備註
<xsl:preserve-space> 項目會將僅含泛空白字元文字節點保留在指定的項目中。 它對於同時含有泛空白字元與非泛空白字元之文字節點中的泛空白字元並沒有效果。 此處所指的僅含泛空白字元文字節點保留,是表示來自於來源文件的節點將會保留在結果文件中。 <xsl:strip-space> 正好相反,會移除指定節點中的僅含泛空白字元文字節點。
根據預設,僅含泛空白字元文字節點會保留下來。 若某個項目名稱符合 <xsl:strip-space> 項目中的名稱測試,則會從保留泛空白字元項目名稱集中移除該名稱。 若某個項目名稱符合 <xsl:preserve-space> 項目中的名稱測試,則該項目會加回至保留泛空白字元項目名稱集中。
如需詳細資訊,請參閱 XSLT W3 建議事項的 3.4 節<移除泛空白字元>(英文),網址是 www.w3.org/TR/xslt。
範例
下列範例說明使用 <xsl:preserve-space> 及 <xsl:strip-space> 來保留及移除僅含泛空白字元文字節點的影響。
XML 檔 (source.xml)
<?xml version="1.0"?>
<document>
<text> </text>
<text> ;</text>
<text>
This is a sample text
</text>
<code> </code>
<code> ;</code>
<code>
This is a sample code
</code>
</document>
XSLT 檔 (trans.xsl)
<?xml version='1.0'?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<!--
The following xsl:preserve-space is not necessary.
It is included to emphasize the fact that white-space-only
text nodes are to be preserved on the <code> elements.
-->
<xsl:preserve-space elements="code"/>
<xsl:strip-space elements="text"/>
<xsl:template match="/">
code elements:
<xsl:apply-templates select="//code"/>
text elements:
<xsl:apply-templates select="//text"/>
</xsl:template>
<xsl:template match="text">
text # <xsl:value-of select="position()"/>
has <xsl:value-of select="count(text())"/> text().
"<xsl:value-of select="translate(.,' 	', '-NRT')"/>"
</xsl:template>
<xsl:template match="code">
code # <xsl:value-of select="position()"/>
has <xsl:value-of select="count(text())"/> text().
"<xsl:value-of select="translate(.,' 	', '-NRT')"/>"
</xsl:template>
</xsl:stylesheet>
請嘗試
複製上述程式碼並將其儲存在本機磁碟機的適當檔案中。
從命令提示字元中使用 Command Line Transformation Utility (msxsl.exe),以啟動 XSLT 轉換,如下所示:
msxsl source.xml trans.xsl
重要
請不要從 Internet Explorer 啟動這項轉換。瀏覽器會執行某些與 XSLT 規格不相容的空白字元移除作業。這可能會使 XLST 轉換產生行為異常。
輸出
此為標準輸出:
code elements:
code # 1
has 1 text().
"---"
code # 2
has 1 text().
"--;"
code # 3
has 1 text().
"NThis-is-a-Tsample-codeTNTN"
text elements:
text # 1
has 0 text().
""
text # 2
has 1 text().
"--;"
text # 3
has 1 text().
"NThis-is-a-Tsample-textTNTN"
請注意,轉換作業會針對第一個 <code> 項目產生一個文字節點,但不會對第一個 <text> 項目產生文字節點。 這是因為,根據樣式表開頭所列的 <xsl:preserve-space> 與 <xsl:strip-space> 指示,這些項目都具有一個保留在 <code> 中、但在 <text> 中移除的僅含泛空白字元文字節點。 每個類型的第二個與第三個項目說明,並非僅含泛空白字元的文字節點不受這些指示的影響。