A number of factors combine to determine whether whitespace-only text nodes in the source document are visible to the user-written XSLT or XQuery code.
By default, if there is a DTD or schema, then ignorable whitespace is stripped from any source
document loaded from a StreamSource
or SAXSource
. Ignorable whitespace is defined
as the whitespace that appears separating the child elements in element declared to have element-only content.
This whitespace is removed regardless of any xml:space
attributes in the source document.
This represents an incompatible change in Saxon 8.6 relative to previous versions; the change has been made because this is now the standard approach defined in the W3C data model document.
It is possible to change this default behavior in several ways.
From the Transform or Query command line, options are available: -sall strips all whitespace text nodes, -snone strips no whitespace text nodes, and -signorable strips ignorable whitespace text nodes only (this is the default).
If the -p option is used on the command line, then query parameters are recognized in the URI passed to
the document()
or doc()
function. The parameter strip-space=yes
strips
all whitespace text nodes, strip-space=no
strips
no whitespace text nodes, and strip-space=ignorable
strips
ignorable whitespace text nodes only. This overrides anything specified on the command line.
Options corresponding to the above can also be set on the TransformerFactory
object or on the
Configuration
. These settings are global.
Whitespace stripping that is specified in any of the above ways occurs only if the source document is
parsed: that is, if it supplied as a JAXP StreamSource
or SAXSource
.
This whitespace stripping is additional (and prior) to any stripping carried out as a result of the
xsl:strip-space
declaration in the stylesheet.