saxon:key-map
Returns a map providing access to the index constructed using xsl:key
key-map($key as xs:string, $doc as node(), $min as xs:string?, $max as xs:string?) ➔ map(xs:string, node()*)
Arguments | |||
| $key | xs:string | The name of the key |
| $doc | node() | The root of the tree |
| $min | xs:string? | The low end of the required key range |
| $max | xs:string? | The high end of the required key range |
Result | map(xs:string, node()*) |
Details
Namespace: http://saxon.sf.net/
To use this function, it is first necessary to declare a key as a range key, which can be done using a declaration such as:
<xsl:key name="k" match="transaction" use="@date" saxon:range-key="yes"/>The effect of this declaration is that Saxon builds the index underpinning the key using a Java TreeMap
rather than a HashMap
,
making ordered traversal possible. At present a key can be declared as a range key only if the keys are of type string (or untypedAtomic),
and if the Unicode codepoint collation is used. If there are several xsl:key
elements with the same name, declaring any one of them
as a range key is sufficient.
The effect of the saxon:key-map()
function is to construct a map (actually, a wrapper for the underlying index),
in which the entries represent the nodes selected by the match
pattern of the xsl:key
declaration
within the document identified by the doc
argument. The min
and max
arguments
restrict the map to those entries whose keys lie between the min
and max
values respectively;
either argument can be set to an empty sequence to indicate an open-ended range of key values.
In the resulting map, the function map:keys()
is guaranteed to return keys in sorted order. (This does not apply, however,
if new maps are constructed from this map by adding or removing entries or combining several maps).
The resulting map can be used using all the functions available for maps, for example map:get()
to get an entry,
map:keys()
to enumerate the key values, map:is-empty()
to determine if the map is empty, and so on.
The maps for several documents can be combined into a single map using a construct such as:
Note however that the resulting map will not be sorted.
Notes on the Saxon implementation
Available since Saxon 9.5. Applicable to XSLT only.