Re: [xsl] XPath expression that returns a sequence of pairs?

Subject: Re: [xsl] XPath expression that returns a sequence of pairs?
From: "Michael Kay michaelkay90@xxxxxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx>
Date: Tue, 17 Jan 2023 20:22:49 -0000
The XPath 2.0 data model does not allow sequences of sequences, so there's no
obvious way to represent a sequence of pairs -- except as an XML tree, of
course.

In XPath 3.1 you can return an array. Actually you can return an array of
arrays, an array of sequences, or a sequence of arrays. For example to return
a sequence of arrays write

> for $i in //Observation return [data($i/Target-Latitude),
data($i/Target-Longitude)]

Michael Kay
Saxonica

> On 17 Jan 2023, at 20:08, Roger L Costello costello@xxxxxxxxx
<xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> wrote:
>
> Hi Folks,
>
> I have this XML document:
>
> <Track-History>
>    <Track-ID>XYZ</Track-ID>
>    <Observation>
>        <Target-Latitude>10</Target-Latitude>
>        <Target-Longitude>20</Target-Longitude>
>        <Observer-Latitude>40</Observer-Latitude>
>        <Observer-Longitude>50</Observer-Longitude>
>    </Observation>
>    <Observation>
>        <Target-Latitude>15</Target-Latitude>
>        <Target-Longitude>25</Target-Longitude>
>        <Observer-Latitude>40</Observer-Latitude>
>        <Observer-Longitude>50</Observer-Longitude>
>    </Observation>
> </Track-History>
>
> I want an XPath expression that returns a sequence of (Target-Latitude,
Target-Longitude) pairs; i.e., a pair for each <Observation> element. For the
XML document shown above, the XPath should return this sequence:
>
> (10,20), (15,25)
>
> A count of the number of items in the sequence should yield: 2
>
> The following XPath is not correct:
>
> for $i in //Observation return ($i/Target-Latitude, $i/Target-Longitude)
>
> A count of the number of items returned by that XPath yields: 4
>
> Is there an XPath to do what I seek?
>
> /Roger

Current Thread