Conditional blocks in XSSI look as follows:
<!-- #if expr="test_expr_1" --> Content to process if test_expr_1 is true <!-- #elif expr="test_expr_2" --> Content to process if test_expr_2 is true . . <!-- #elif expr="test_expr_n" --> Content to process if test_expr_n is true <!-- #else --> Content to process if all the above tests are false <!-- #endif -->#elif sections are optional. A conditional block can have zero or many of them. The #else is optional and a conditional block can have either no #else or exactly one.
Conditional blocks can be nested.
The value of the expr attribute inside #if and #elif directives is considered as an expression which evaluates to true or false according to these rules:
Evaluates to true if string is not empty.
Performs a lexicographic comparison between string_1 and string_2.
Tests the equality (with = or ==) or inequality (with !=) of string_1 and string_2.
If string_2 has the form /regex/, a regular expression matching operation will take place instead. Any literal slash character (/) in regex has to be escaped by preceding it with a backslash character (\).
Matched sub-strings are captured inside the variables $0, $1, ..., $9. For more information about backreferences, refer to the "Regular Expressions" appendix.
Evaluates to true if both test_expr_1 and test_expr_2 expressions are true.
Evaluates to true if at least one of the expressions test_expr_1 and test_expr_2 is true.
Evaluates to true if test_expr is false.
Evaluates to true if test_expr is true. Parentheses are used to enclose sub-expressions and supersede the priorities of their operators.
! has higher priority than && and || which at their turn have higher priority than =, !=, ==, <=, >=, <, and >.
Example 7-2. Variable Expansion in Expressions
If a string operand (such as string, string_1 or string_2 in the above syntax list) includes a variable expansion that may contain a sequence similar to one of the operators, it is recommended to enclose it between quotes to avoid any ambiguity.
For example, if variable HTTP_COOKIE is set to lang=en, the following directive will fail with an error because the expansion of the variable includes the character = which is considered as an equality test:
<!-- #if expr="$HTTP_COOKIE = /lang=(.*)/" --> Language code is <!-- #echo text="$1" --> <!-- #else --> No langage is set. <!-- #endif -->The proper way to do the test without errors is to enclose the expansion between quotes as in :
<!-- #if expr="'$HTTP_COOKIE' = /lang=(.*)/" --> Language code is <!-- #echo text="$1" --> <!-- #else --> No langage is set. <!-- #endif -->