- From: Steven Pemberton <steven.pemberton@cwi.nl>
- Date: Wed, 28 Jun 2017 12:08:19 +0200
- To: " XForms" <public-xformsusers@w3.org>
I've been writing a big form this week, and I discovered that I was
creating admin elements just to use for their relevance, in order to drive
model-based switch.
This led to me to realise that I would like switch/case to be a bit more
flexible: I'd like the cases to match on expressions.
Not
<switch ref="/payment/details/@method">
<case/>
<case name="creditCard" label="Credit Card Details">
...
</case>
<case name="cashCard" label="Bank Account Card">
...
</case>
<case name="COD" label="Cash-on-delivery Account Information">
...
</case>
</switch>
but
<switch ref="/payment/details/@method">
<case if=". = 'creditCard'" label="Credit Card Details">
...
</case>
<case if=". = 'cashCard'" label="Bank Account Card">
...
</case>
<case if=". = 'COD'" label="Cash-on-delivery Account Information">
...
</case>
<case/>
</switch>
But then of course that led me to want:
<switch value="...">
as well.
Well, what could I do with it. How about
<repeat ref="node()">
<output value="concat(name(.), ':')"/>
<switch>
<case if="count(node()) = 0">
<output ref="."/>
</case>
<case if="count(node()) > 0">
<repeat ...> ...
</repeat>
</case>
</switch>
</repeat>
Rules:
* value is obtained from switch/@ref or switch/@value
* first case with @if that evaluates to true is selected
* if last case has no condition and no case has been selected, it is
selected.
Steven
Received on Wednesday, 28 June 2017 10:08:53 UTC