Re: Response headers

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