- From: Erik Bruchez <ebruchez@orbeon.com>
- Date: Thu, 25 Mar 2021 10:22:09 -0700
- To: Steven Pemberton <steven.pemberton@cwi.nl>
- Cc: XForms <public-xformsusers@w3.org>
- Message-ID: <CAAc0PEW1dRPJmtEMJ0y0D2jKJrQJRXw7ASFvPMEoU=AtJCc2rw@mail.gmail.com>
The spec says that event('response-headers') returns a `node-sequence`. So you have, in an informal way, using parentheses and commas to denote the sequence, something like this: ( <header> <name>last-modified</name> <value>Wed, 24 Mar 2021 02:26:50 GMT</value> </header> , <header> <name>content-type</name> <value>application/xml</value> </header> , etc. ) A sequence is similar to an array (although in XPath 3 arrays are something else yet!). So you could write: event('response-headers')[2] and this would, in the above case, return the `content-type` header element. But you cannot write: event('response-headers')/header because each item in the sequence doesn't have a `header` child element. It has `name` and `value` children elements only. The following might not work with all implementations, and arguably shouldn't: event('response-headers')/../header because it is assuming that all the elements in the sequence have a parent node and that it is the same parent node for all `header` elements. This is not required by the spec. The `header` elements can all be parent-less. Similarly, you cannot reliably write: event('response-headers')[1]/following-sibling::header because the elements are not required to be siblings (and probably should not be). To conclude, this is the correct and simple way to write your expression: event('response-headers')[name = 'last-modified']/value :) -Erik On Mon, Mar 22, 2021 at 3:40 AM Steven Pemberton <steven.pemberton@cwi.nl> wrote: > Ok, so > <setvalue ref="lm" > value="event('response-headers')/../header[name='last-modified']/value"/> > > works as well. Not sure why the .. step is needed. > > Steven > > On Sunday 21 March 2021 21:04:46 (+01:00), Steven Pemberton wrote: > > > In a submit-done handler, is this really the best way to get to the > "last-modified' header? > > > > <setvalue ref="lm" > > value="event('response-headers')/name[.='last-modified']/following-sibling::value"/> > > > > > > > I was rather disappointed that this didn't work: > > > > <setvalue ref="lm" > value="event('response-headers')/header[name='last-modified']/value"/> > > > > Steven > > > -- > >
Received on Thursday, 25 March 2021 17:23:34 UTC