- From: Jason <jeacott@hardlight.com.au>
- Date: Fri, 01 Dec 2006 10:55:39 +1030
- To: "Klotz, Leigh" <Leigh.Klotz@xerox.com>
- CC: www-forms <www-forms@w3.org>
I think allowing an xslt or other arbitrary language filter is a much better option. xpath alone will never get you a formatted, human readable email message for example. I know it violates the declarative thing, but not all processing lends itself well to the declarative model. Jason. Klotz, Leigh wrote: > Itwouldbeniceif there were a way to filter a list of matching nodes to > submit. > > I would like to submit only the index numbers of items whose @selected > attribute is true. > > The present definition of submission/@ref uses the first nodeset rule, > so you cannot just do > <submission > ref="instance('data')/lines/line[boolean-from-string(@selected)]/index" > /> > Additionally, the ref attribute doesn't appear to be precise enough to > specify what parts of the tree to submit and what parts to leave out. > > Some simple XPath-based filtering syntax like that would be attractive, > though. > > Here's one way to do it, using a control variable (set during submission > only) and a pair of bind elements, one to say the > "/lines/line[boolean-from-string(@selected)]" part and another to say > that "index" part. > > Can anybody think of a clever union expression to put in submission/@ref > that just does what I want? > > <instance id="data"> > <data xmlns=""> > <lines> > <line selected="false"> > <index>1</index> > <date>2006-01-01T00:00:00Z</date> > <name>A</name> > <text>...</text> > </line> > <line selected="false"> > <index>2</index> > <date>2006-01-01T01:00:00Z</date> > <name>B</name> > <text>...</text> > </line> > <line selected="false"> > <index>3</index> > <date>2006-01-01T02:00:00Z</date> > <name>C</name> > <text>...</text> > </line> > </lines> > </data> > </instance> > > <instance id="results"> > <empty xmlns=""/> > </instance> > > <instance id="control"> > <control xmlns=""> > <selected>false</selected> > </control> > </instance> > > <bind nodeset="instance('data')lines/line/@selected" type="xsd:boolean" > /> > <bind nodeset="instance('control')/selected" type="xsd:boolean" /> > > <bind nodeset="instance('data')/lines/*[local-name(.)!='index']" > relevant="not(boolean-from-string(instance('control')/selected)) > <bind nodeset="instance('data')/lines/line" > relevant="not(boolean-from-string(instance('control')/selected)) > or boolean-from-string(@selected)"/> > > <submission id="delete" action="/delete" ref="instance('data')" > replace="instance" instance="results"> > <setvalue ev:event="xforms-submit" > ref="instance('control')/selected">true</setvalue> > <setvalue ev:event="xforms-submit-done" > ref="instance('control')/selected">false</setvalue> > <setvalue ev:event="xforms-submit-error" > ref="instance('control')/selected">false</setvalue> > </submission> > > <submit submission="delete"> > <label>Delete</label> > </submit> > > <repeat id="lines" nodeset="lines/line"> > <input ref="@selected"> > <label class="columnHeader">X</label> > </input> > <output ref="date"> > <label class="columnHeader">Date</label> > </output> > <output ref="name"> > <label class="columnHeader">Name</label> > </output> > </repeat> > > <output ref="lines/line[index('lines')]/text"> > <label>Text</label> > </output> > > >
Received on Friday, 1 December 2006 00:25:56 UTC