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

Subject: Re: [xsl] XPath expression that returns a sequence of pairs?
From: "Martin Honnen martin.honnen@xxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx>
Date: Tue, 17 Jan 2023 20:19:13 -0000
On 1/17/2023 9:08 PM, Roger L Costello costello@xxxxxxxxx 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?


In XPath 3.1 use a sequence of maps e.g.


B  //Observation/map { 'lat' : data(Target-Latitude), 'long' :
data(Target-Longitude) }


then you can process e.g.


B  let $maps := //Observation/map { 'lat' : data(Target-Latitude),
'long' : data(Target-Longitude) }

B return for $map in $maps

B return ($map?lat, $map?long)

Current Thread