[XSL-LIST Mailing List Archive Home]
[By Thread]
[By Date]
RE: [xsl] merging sequences
Subject: RE: [xsl] merging sequences From: Fabien Tillier <ftillier@xxxxxxxx> Date: Mon, 16 Jan 2012 08:47:35 +0000 |
Hi Ken, Andrew and David. First of all, thank you very much for these smart answers. I think I will learn much from them. 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 When David's output is N112 N100 N107 N306 P2010 N109 P2014 P2015 N108 N203 N206 N307 N311 I will now put it in a real life conditions and see if with other inputs it still performs well. Thanks again to you all since it was really (at least for me) a tough problem :) Kind regards, Fabien -----Message d'origine----- De : G. Ken Holman [mailto:gkholman@xxxxxxxxxxxxxxxxxxxx] Envoyi : vendredi 13 janvier 2012 17:28 @ : xsl-list@xxxxxxxxxxxxxxxxxxxxxx; xsl-list@xxxxxxxxxxxxxxxxxxxxxx; xsl-list@xxxxxxxxxxxxxxxxxxxxxx Objet : Re: [xsl] merging sequences At 2012-01-13 10:48 -0500, I wrote: >At 2012-01-13 14:41 +0000, Fabien Tillier wrote: >>I have the two following sequences >>N112 N100 N107 P2010 N109 P2014 P2015 N108 N203 N206 N307 N311 >>And >>N112 N100 P2014 P2015 N108 N203 N306 N206 N307 N311 >>... >>I would like to align these so that the resulting sequence contains >>all items, but keeping the order, thus >>... >>N112 N100 N107 P2010 N109 P2014 P2015 N108 N203 N306 N206 N307 N311 > >I hope the example below helps. It bases a sort on expressing each >item's location in its own sequence and the other sequence. I didn't give you the result as a variable, only as output. The example below gives you a variable of strings you can then work with. I hope this helps. . . . . . . Ken T:\ftemp>xslt2 fabien.xsl fabien.xsl N112,N100,N107,P2010,N109,P2014,P2015,N108,N203,N206,N307,N311 N112,N100,P2014,P2015,N108,N203,N306,N206,N307,N311 N112,N100,N107,P2010,N109,P2014,P2015,N108,N203,N306,N206,N307,N311 T:\ftemp>type fabien.xsl <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xsd="http://www.w3.org/2001/XMLSchema" version="2.0"> <xsl:output method="text"/> <xsl:template match="/"> <!--input sequences--> <xsl:variable name="seq1" select="tokenize('N112 N100 N107 P2010 N109 P2014 P2 015 N108 N203 N206 N307 N311','\s+')"/> <xsl:variable name="seq2" select="tokenize('N112 N100 P2014 P2015 N108 N203 N3 06 N206 N307 N311','\s+')"/> <!--order them with information about their position in other sequence--> <xsl:variable name="items1"> <xsl:for-each select="$seq1"> <item index="{position()}" other="{index-of($seq2,.)[1]}"> <xsl:value-of select="."/> </item> </xsl:for-each> </xsl:variable> <xsl:variable name="items2"> <xsl:for-each select="$seq2"> <item index="{position()}" other="{index-of($seq1,.)[1]}"> <xsl:value-of select="."/> </item> </xsl:for-each> </xsl:variable> <xsl:variable name="seq" as="xsd:string*"> <!--order the result based on relative positions--> <xsl:for-each select="$items1/item,$items2/item[@other='']"> <xsl:sort select="(:the relative order is latest of self or other:) max((number(@index), if(@other='') (:if no other, then use previous other:) then preceding-sibling::*[@other!=''][1]/number(@other) else number(@other)))"/> <xsl:sequence select="."/> </xsl:for-each> </xsl:variable> <!--reveal inputs and outputs--> <xsl:value-of select="$seq1" separator=","/><xsl:text>
</xsl:text> <xsl:value-of select="$seq2" separator=","/><xsl:text>
</xsl:text> <xsl:value-of select="$seq" separator=","/><xsl:text>
</xsl:text> </xsl:template> </xsl:stylesheet> T:\ftemp> -- Contact us for world-wide XML consulting and instructor-led training Free 5-hour video lecture: XSLT/XPath 1.0 & 2.0 http://ude.my/uoui9h Crane Softwrights Ltd. http://www.CraneSoftwrights.com/s/ G. Ken Holman mailto:gkholman@xxxxxxxxxxxxxxxxxxxx Google+ profile: https://plus.google.com/116832879756988317389/about Legal business disclaimers: http://www.CraneSoftwrights.com/legal
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] merging sequences, G. Ken Holman | Thread | Re: [xsl] merging sequences, David Carlisle |
Re: [xsl] Creating an Index Page th, G. Ken Holman | Date | [xsl] Nordic Characters in variable, trond.huso |
Month |
Keywords