xmlif filters XML according to conditionalizing markup. This can be useful for formatting one of several versions of an XML document depending on conditions passed to the command.
Attribute/value pairs from the command line are matched against
the attributes associated with certain processing instructions in the
document. The instructions are <?maybe if?>
and its inverse <?maybe if not?>
,
<?maybe elif?>
and its inverse
<?maybe elif not?>
, <?maybe
else?>
, and <?maybe fi?>
.
Argument/value pairs given on the command line are checked against the value of corresponding attributes in the conditional processing instructions. An ‘attribute match’ happens if an attribute occurs in both the command-line arguments and the tag, and the values match. An ‘attribute mismatch’ happens if an attribute occurs in both the command-line arguments and the tag, but the values do not match.
Spans between <?maybe if?>
or
<?maybe elif?>
and the next conditional
processing instruction at the same nesting level are passed through
unaltered if there is at least one attribute match and no attribute
mismatch; spans between <?maybe if not?>
and
<?maybe elif not?>
and the next conditional
processing instruction are passed otherwise. Spans between
<?maybe else?>
and the next
conditional-processing tag are passed through only if no previous span
at the same level has been passed through. <?maybe
if?>
and <?maybe fi?>
(and their
‘not’ variants) change the current nesting level;
<?maybe else?>
and <?maybe
elif?>
do not.
Conditionals can be nested to any depth.
All these processing instructions will be removed from the output produced. Aside from the conditionalization, all other input is passed through untouched; in particular, entity references are not resolved.
Value matching is by string equality, except that "|" in an attribute value is interpreted as an alternation character. Thus, saying foo='red|blue' on the command line enables conditions red and blue. Saying color='black|white' in a tag matches command-line conditions color='black' or color='white'.
Here is an example:
Always issue this text. <?maybe if condition='html'?> Issue this text if 'condition=html' is given on the command line. <?maybe elif condition='pdf|ps'?> Issue this text if 'condition=pdf' or 'condition=ps' is given on the command line. <?maybe else?> Otherwise issue this text. <?maybe fi?> Always issue this text.