Posted by
Thorsten Stumpf on
URL: https://discuss.orbeon.com/Element-content-calculation-vs-form-field-controlled-attribute-tp3990317.html
Hello!
The following is a bit complicated to explain but I hope the example clearifies it:
I have a problem with an automatic calculation of textual element content for an node which has an attribute controlled by a form field.
I.e. if a elements content (<element @attribute="i-dont-mean-this">CONTENT</element>) is calculated by a bind the elements attributes can not be altered by user input in a form field.
Uhm, that sounds a bit complicated, so let's rather have a look at some example:
There's an instance flights containing the basic data - for this example it contains cities:
<flights>
<flight code="LHR/LH522BUS">
<city code="LHR ">London</city>
<airline code="LH">Lufthansa</airline>
<price currency="€">5412</price>
<tariff code="BUS"/>
</flight>
<flight code=" LGW/AC853ECO">
<city code="LGW ">London</city>
<airline code="AC">Air Canada</airline>
<price currency="€">845</price>
<tariff code="ECO"/>
</flight> ...
</flights>
And then there is a part in an other instance (booking) which should reflect the selected information:
<booking>
...
<flight type="" code="" acc="">
<city code=""/>
<airline code=""/>
<price currency=""/>
<tariff code=""/>
</flight>
...
</booking>
For this example at first the city is choosen by a dropdown:
<xforms:select1 ref="$booking/city/@code">
<xforms:label>Airport</xforms:label>
<xforms:itemset nodeset="instance('response')//flight">
<xforms:label ref="city" />
<xforms:value ref="city/@code" />
</xforms:itemset>
</xforms:select1>
It stores the selection in the @code attribute of the city element in the booking instance (I tried to brake down the hole process which is way more complex).
The code-attribute has thus to be selectable by the user.
But I also want to get the name of the city in the XML. This is done easily by a calculate bind looking up the code (see below).
<xforms:bind ref="$booking">
<xforms:bind ref="@type" calculate="$anreise/@code"/>
<xforms:bind ref="city/@code" required="true()"/>
<xforms:bind ref="city" calculate="xforms:instance('flights')//flight/city[@code = $booking/city/@code]/text()"/>
</xforms:bind>
If I do so the select form field above is readonly because of the calculate.
I do see the ambiguity of the XPath 'city' but IMHO this definitely should be possible.
To be more specific I tried to be explicit by adding '*', 'text()' etc. but nothing did change the behaviour
<xforms:bind ref="city/*" calculate="xforms:instance('flights')//flight/city[@code = $booking/city/@code]/text()"/>
Be prepared: Due to the fact that I tried to break down the actual code to the relevant parts I might have missed something. ;-)
Any hints, can this issue be fixed, can I get around that somehow?
Thanks in advance!
Regards
Thorsten
--
You receive this message as a subscriber of the
[hidden email] mailing list.
To unsubscribe: mailto:
[hidden email]
For general help: mailto:
[hidden email]?subject=help
OW2 mailing lists service home page:
http://www.ow2.org/wws