"The ampersand character (&) and the left angle bracket (<) MUST NOT
appear in their literal form, except when used as markup delimiters, or
within a comment, a processing instruction, or a CDATA section. If they
are needed elsewhere, they MUST be escaped using either numeric
character references or the strings "&" and "<" respectively. The
right angle bracket (>) MAY be represented using the string ">", and
MUST, for compatibility, be escaped using either ">" or a character
reference when it appears in the string "]]>" in content, when that
string is not marking the end of a CDATA section."
And this -
[14] CharData ::= [^<&]* - ([^<&]* ']]>' [^<&]*)
In tests, I usually reverse the sense of a comparison so I can use an
unescaped ">", for better readability. For example,
<xsl:if test='@parm > 2'>...
instead of this -
<xsl:if test='2 < @parm'>...
Try it, you'll like it!
Cheers,
Tom P