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)
|