[XSL-LIST Mailing List Archive Home]
[By Thread]
[By Date]
Re: [xsl] Challenge: do better than my implementation of "update map" and "print map"
Subject: Re: [xsl] Challenge: do better than my implementation of "update map" and "print map" From: Dimitre Novatchev <dnovatchev@xxxxxxxxx> Date: Wed, 28 Aug 2013 20:55:27 -0700 |
In addition, instead of creating N intermediate maps as in the provided code: > <xsl:variable name="m" select="map{'Linda' := 'Rosie'}" /> > > <xsl:variable name="m1" select="f:add-entry-to-map('Sally', 'Betsy', $m)" /> > <xsl:variable name="m2" select="f:add-entry-to-map('Barb', 'Sue', $m1)" /> > <xsl:variable name="m3" select="f:add-entry-to-map('Nadia', 'Valerie', $m2)" /> > <xsl:variable name="m4" select="f:add-entry-to-map('Faye', 'Carol', $m3)" /> > Just do: <xsl:variable name="m" select="map{'Linda' := 'Rosie'}" /> <xsl:variable name="m1" select="map:entry('Sally', 'Betsy')" /> <xsl:variable name="m2" select="map:entry('Barb', 'Sue')" /> <xsl:variable name="m3" select="map:entry('Nadia', 'Valerie')" /> <xsl:variable name="m4" select="map:entry('Faye', 'Carol')" /> <xsl:sequence select="f:print-map(map:new(($m, $m1, $m2, $m3, $m4)))" /> Also, it is possible to get rid of the concat() function in the definition of f:print-map(). Instead of: <xsl:sequence select="map:keys($m) ! concat(., '-', map:get($m, .))"/> Just do: <xsl:sequence select="map:keys($m) ! (., '-', map:get($m, .))"/> So, the complete code now is: <xsl:stylesheet version="3.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:f="function" xmlns:map="http://www.w3.org/2005/xpath-functions/map"> <xsl:output method="text"/> <!-- Test the two map functions --> <xsl:template match="/"> <xsl:variable name="m" select="map{'Linda' := 'Rosie'}" /> <xsl:variable name="m1" select="map:entry('Sally', 'Betsy')" /> <xsl:variable name="m2" select="map:entry('Barb', 'Sue')" /> <xsl:variable name="m3" select="map:entry('Nadia', 'Valerie')" /> <xsl:variable name="m4" select="map:entry('Faye', 'Carol')" /> <xsl:sequence select="f:print-map(map:new(($m, $m1, $m2, $m3, $m4)))" /> </xsl:template> <xsl:function name="f:add-entry-to-map" as="map(xs:anyAtomicType, item()*)"> <xsl:param name="key" as="xs:string" /> <xsl:param name="value" as="item()" /> <xsl:param name="m" as="map(xs:anyAtomicType, item()*)" /> <xsl:sequence select="map:new(($m, map:entry($key, $value)))" /> </xsl:function> <xsl:function name="f:print-map" as="item()*"> <xsl:param name="m" as="map(xs:anyAtomicType, item()*)" /> <xsl:sequence select="map:keys($m) ! (., '-', map:get($m, .))"/> </xsl:function> </xsl:stylesheet> Cheers, Dimitre On Wed, Aug 28, 2013 at 7:49 PM, Dimitre Novatchev <dnovatchev@xxxxxxxxx> wrote: > What about this: > > <xsl:stylesheet version="3.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" > xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:f="function" > xmlns:map="http://www.w3.org/2005/xpath-functions/map"> > > <xsl:output method="text"/> > > <!-- Test the two map functions --> > <xsl:template match="/"> > <xsl:variable name="m" select="map{'Linda' := 'Rosie'}" /> > > <xsl:variable name="m1" select="f:add-entry-to-map('Sally', > 'Betsy', $m)" /> > <xsl:variable name="m2" select="f:add-entry-to-map('Barb', > 'Sue', $m1)" /> > <xsl:variable name="m3" select="f:add-entry-to-map('Nadia', > 'Valerie', $m2)" /> > <xsl:variable name="m4" select="f:add-entry-to-map('Faye', > 'Carol', $m3)" /> > > <xsl:sequence select="f:print-map($m4)" /> > </xsl:template> > > <xsl:function name="f:add-entry-to-map" as="map(xs:anyAtomicType, > item()*)"> > <xsl:param name="key" as="xs:string" /> > <xsl:param name="value" as="item()" /> > <xsl:param name="m" as="map(xs:anyAtomicType, item()*)" /> > > <xsl:sequence select="map:new(($m, map:entry($key, $value)))" /> > </xsl:function> > > <xsl:function name="f:print-map" as="item()*"> > <xsl:param name="m" as="map(xs:anyAtomicType, item()*)" /> > > <xsl:sequence select="map:keys($m) ! concat(., '-', map:get($m, .))"/> > </xsl:function> > </xsl:stylesheet> > > Cheers, > Dimitre > > > On Wed, Aug 28, 2013 at 2:52 PM, Costello, Roger L. <costello@xxxxxxxxx> wrote: >> >> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >> xmlns:map="http://www.w3.org/2005/xpath-functions/map" >> xmlns:xs="http://www.w3.org/2001/XMLSchema" >> xmlns:f="function" >> version="3.0"> >> >> <!-- Test the two map functions --> >> >> <xsl:template match="/"> >> <xsl:variable name="m" select="map{'Linda' := 'Rosie'}" /> >> >> <xsl:variable name="m1" select="f:add-entry-to-map('Sally', 'Betsy', $m)" /> >> <xsl:variable name="m2" select="f:add-entry-to-map('Barb', 'Sue', $m1)" /> >> <xsl:variable name="m3" select="f:add-entry-to-map('Nadia', 'Valerie', $m2)" /> >> <xsl:variable name="m4" select="f:add-entry-to-map('Faye', 'Carol', $m3)" /> >> >> <xsl:sequence select="f:print-map($m4)" /> >> >> </xsl:template> >> >> <xsl:function name="f:add-entry-to-map" as="map(xs:string, item())"> >> <xsl:param name="key" as="xs:string" /> >> <xsl:param name="value" as="item()" /> >> <xsl:param name="m" as="map(xs:string, item())" /> >> >> <xsl:sequence select="map:new((for $i in map:keys($m) return map:entry($i, map:get($m, $i)), map:entry($key, $value)))" /> >> >> </xsl:function> >> >> <xsl:function name="f:print-map" as="xs:string*"> >> <xsl:param name="m" as="map(xs:string, item())" /> >> >> <xsl:for-each select="map:keys($m)"> >> <xsl:value-of select="." /> >> <xsl:text> - </xsl:text> >> <xsl:value-of select="map:get($m, .)" /> >> </xsl:for-each> >> </xsl:function> >> >> </xsl:stylesheet> > > > > > -- > Cheers, > Dimitre Novatchev > --------------------------------------- > Truly great madness cannot be achieved without significant intelligence. > --------------------------------------- > To invent, you need a good imagination and a pile of junk > ------------------------------------- > Never fight an inanimate object > ------------------------------------- > To avoid situations in which you might make mistakes may be the > biggest mistake of all > ------------------------------------ > Quality means doing it right when no one is looking. > ------------------------------------- > You've achieved success in your field when you don't know whether what > you're doing is work or play > ------------------------------------- > Facts do not cease to exist because they are ignored. > ------------------------------------- > Typing monkeys will write all Shakespeare's works in 200yrs.Will they > write all patents, too? :) > ------------------------------------- > I finally figured out the only reason to be alive is to enjoy it. -- Cheers, Dimitre Novatchev --------------------------------------- Truly great madness cannot be achieved without significant intelligence. --------------------------------------- To invent, you need a good imagination and a pile of junk ------------------------------------- Never fight an inanimate object ------------------------------------- To avoid situations in which you might make mistakes may be the biggest mistake of all ------------------------------------ Quality means doing it right when no one is looking. ------------------------------------- You've achieved success in your field when you don't know whether what you're doing is work or play ------------------------------------- Facts do not cease to exist because they are ignored. ------------------------------------- Typing monkeys will write all Shakespeare's works in 200yrs.Will they write all patents, too? :) ------------------------------------- I finally figured out the only reason to be alive is to enjoy it.
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] Challenge: do better than, Dimitre Novatchev | Thread | Re: [xsl] Challenge: do better than, sean |
Re: [xsl] Challenge: do better than, sean | Date | Re: [xsl] Challenge: do better than, sean |
Month |