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

Subject: Re: [xsl] XPath expression that returns a sequence of pairs?
From: "Liam R. E. Quin liam@xxxxxxxxxxxxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx>
Date: Tue, 17 Jan 2023 21:18:22 -0000
On Tue, 2023-01-17 at 20:09 +0000, Roger L Costello costello@xxxxxxxxx
wrote:
>
> 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

As others have said, you can't do this in the XPath Data Model with
sequences, but you can with arrays of course.

let $input := <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>
return for $observation in $input/Observation
return [
  xs:integer($observation/Target-Latitude),
  xs:integer($observation/Target-Longitude)
]

If you wrap that whole thing in count( ... ) you get 2.

You possibly want xs:double() rather than xs:integer(), or xs:string(),
in production of course.

liam

--
Liam Quin,B https://www.delightfulcomputing.com/
Available for XML/Document/Information Architecture/XSLT/
XSL/XQuery/Web/Text Processing/A11Y training, work & consulting.
Barefoot Web-slave, antique illustrations: B http://www.fromoldbooks.org

Current Thread