xsl-list
[Top] [All Lists]

Re: [xsl] Constructing a Map Using xsl:for-each-group

2018-05-25 18:21:24
Your <map:entry> elements should be <xsl:map-entry>.

Had me baffled for a bit.

Michael Kay
Saxonica

On 26 May 2018, at 00:06, Eliot Kimber ekimber(_at_)contrext(_dot_)com 
<xsl-list-service(_at_)lists(_dot_)mulberrytech(_dot_)com> wrote:

I want to construct a map where the keys are attribute values and the entries 
contain the elements that exhibit those attribute values. The obvious way to 
do this is with for-each-group:

     <xsl:variable name="links-by-target-id" as="map(xs:string, element()*)">
       <xsl:map>
         <xsl:for-each-group select="$docbook-links" group-by="@linkend">
           <map:entry key="{current-grouping-key()}">
             <xsl:sequence select="current-group()"/>
           </map:entry>
         </xsl:for-each-group>
       </xsl:map>
     </xsl:variable>

However, using Saxon 9.8.0.8 from Oxygen I get this message:

"Required item type of xsl:map sequence constructor is map(*); supplied value 
(xsl:for-each-group) has item type element(). The expression can succeed only 
if the supplied value is an empty sequence."

The XSLT spec says that the contents of <xsl:map> is a sequence constructor, 
which for-each-group certainly is.

Is this message legit? I don't see how it can be but maybe I'm missing a 
subtlety in the map instruction?

Thanks,

Eliot
--
Eliot Kimber
http://contrext.com


--~----------------------------------------------------------------
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
EasyUnsubscribe: http://lists.mulberrytech.com/unsub/xsl-list/1167547
or by email: xsl-list-unsub(_at_)lists(_dot_)mulberrytech(_dot_)com
--~--

<Prev in Thread] Current Thread [Next in Thread>