[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message]

RE: merging sequences

Subject: RE: merging sequences
From: Fabien Tillier <ftillier@xxxxxxxx>
Date: Mon, 16 Jan 2012 15:27:04 +0000
RE:  merging sequences
Hi David.
Thanks for taking the time to fix it, David.

Best regards,
Fabien


-----Message d'origine-----
De : David Carlisle [mailto:davidc@xxxxxxxxx]
Envoyi : lundi 16 janvier 2012 11:58
@ : xsl-list@xxxxxxxxxxxxxxxxxxxxxx
Cc : Fabien Tillier
Objet : Re:  merging sequences

On 16/01/2012 08:47, Fabien Tillier wrote:
> When David's output is

sorry the last clause in my merge function had what the polite might
call a premature optimisation, or the honest would call a bug...

it should not try to output the first element of both lists in the last
case, fixing that produces the output you expected:

$ saxon9 -it m merge.xsl
N112 N100 N107 P2010 N109 P2014 P2015 N108 N203 N306 N206 N307 N311

> Regarding my specific needs, Ken's solution fits better since the order is
exactly as expected
> N112,N100,N107,P2010,N109,P2014,P2015,N108,N203,N306,N206,N307,N311

David




<xsl:stylesheet version="2.0"
		xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
		xmlns:f="data:,f"
		>

<xsl:output method="text"/>

<xsl:variable name="a" select="
'N112','N100','N107','P2010','N109','P2014','P2015','N108','N203',
   'N206','N311'
"/>

<xsl:variable name="b" select="
'N112','N100',
'P2014','P2015','N108','N203','N306','N206','N307','N311'
"/>

<xsl:template name="m">

<xsl:sequence select="f:merge($a,$b)"/>
</xsl:template>

<xsl:function name="f:merge">
<xsl:param name="a"/>
<xsl:param name="b"/>
<xsl:choose>
  <xsl:when test="empty($a)">
   <xsl:sequence select="$b"/>
  </xsl:when>
  <xsl:when test="empty($b)">
   <xsl:sequence select="$a"/>
  </xsl:when>
  <xsl:when test="$a[1]=$b[1]">
   <xsl:sequence
select="$a[1],f:merge($a[position()!=1],$b[position()!=1])"/>
  </xsl:when>
  <xsl:when test="$a[1]=$b">
   <xsl:sequence select="f:merge($a[position()!=1],$b)"/>
  </xsl:when>
  <xsl:when test="$b[1]=$a">
   <xsl:sequence select="f:merge($a,$b[position()!=1])"/>
  </xsl:when>
  <xsl:otherwise>
   <xsl:sequence select="$a[1],f:merge($a[position()!=1],$b)"/>
  </xsl:otherwise>
</xsl:choose>
</xsl:function>
</xsl:stylesheet>


--
google plus: https:/profiles.google.com/d.p.carlisle

________________________________________________________________________
The Numerical Algorithms Group Ltd is a company registered in England
and Wales with company number 1249803. The registered office is:
Wilkinson House, Jordan Hill Road, Oxford OX2 8DR, United Kingdom.

This e-mail has been scanned for all viruses by Star. The service is
powered by MessageLabs.
________________________________________________________________________

Current Thread

PURCHASE STYLUS STUDIO ONLINE TODAY!

Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!

Buy Stylus Studio Now

Download The World's Best XML IDE!

Accelerate XML development with our award-winning XML IDE - Download a free trial today!

Don't miss another message! Subscribe to this list today.
Email
First Name
Last Name
Company
Subscribe in XML format
RSS 2.0
Atom 0.3
Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member
Stylus Studio® and DataDirect XQuery ™are products from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2013 All Rights Reserved.