3.5. X-definition designed to combine both modes
<xd:def xmlns:xd="http://www.xdef.org/xdef/4.2"
xd:name="WeatherDisplay" xd:root="Weather" >
<xd:declaration> float sum = 0; int num = 0; </xd:declaration>
<Weather xd:script="finally returnElement(xcreate('html'));"
date="optional date();" >
<Measurement xd:script="occurs *;"
temperature="float(-30.0, +50.0); /*limits of values*/
onTrue {num++; sum = parseFloat(getText());}"
wind ="float();"
time = "time();" />
</Weather>
<html>
create 'Weather on ' + from('@date');
/* Note all elements "li" are created from elements "Measurement" */
<li xd:script="occurs *; create from('Measurement');" >
create 'Time: ' + from('@time') + ', wind: ' + from('@wind')
+ ', temperature: ' + from('@temperature');
</li>
<h3> /* Create the text with the average of measured temperatures */
create num == 0 ? 'No measurements' : format('Average temperature: %2.1f', sum/num));
</h3>
</html>
</xd:def>
You can try it
HERE