In order to eliminate anything that looks like "indentation" it may be necessary (that means there are cases when you need) to use both <xsl:strip-space>
and `indent="no"
.
Take the simplest example: you have the identity transformation. Without any of the two methods specified, the transformation will reproduce the white-space-only text nodes from the source XML document. That is, if the source XML document is indented, the transformation will produce indented result, too.
Now, add to this transformation <xsl:output indent="no" />
. This instructs the XSLT processor not to perform "pretty-printing" of its own. However, the whitespace-only nodes from the source XML document are still copied to the output and the result document looks still indented (because the source document is indented).
Now, as a last step, add <xsl:strip-space elements="*"/>
. You have specified both methods of preventing white-space-only nodes in the output. What happens? No white-space-only nodes are processed at all by the XSLT processor, and it does not indent the output -- you get your desired one-line dense output.
Finally, make a regression, change the <xsl:output indent="no" />
to <xsl:output indent="yes" />
. The <xsl:strip-space elements="*"/>
is still there, so no whitespace-only nodes are reproduced in the output. But the XSLT processor obeys the <xsl:output indent="yes" />
directive and adds whitespace-only text nodes of its own.
So, from the four possible combinations, only specifying both <xsl:strip-space elements="*"/>
and <xsl:output indent="no" />
guarantees that no indentation will be caused either from whitespace-only nodes from the source XML document or from the XSLT processors initiative.
Even this last case, of course, doesn't completely guarantee that the output won't be indented -- if the XSLT programmer intentionally puts there indentation code such as
<xsl:text>
</xsl:text>
the output will contain this indentation.