[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message] Re: build group of elements
The mistake was in the loop: correct is: <xsl:for-each select="."> now the script works fine! brg hh --- henry human <henry_human@xxxxxxxx> schrieb am Mo, 25.6.2012: > Von: henry human <henry_human@xxxxxxxx> > Betreff: Re: build group of elements > An: xsl-list@xxxxxxxxxxxxxxxxxxxxxx > Datum: Montag, 25. Juni, 2012 15:26 Uhr > here is the xslt and the input data > > > ------------------------Output------------------------------ > <xsl:for-each select="DATA/REF"> > > > <xsl:variable name="adrTyp" > select="@ref:ADRTYP"/> > <xsl:variable name="refs" > select="REF"/> > <xsl:variable name="noOfSegments" > select="xs:integer(max(( '1', xs:string(ceiling(count($refs) > div 5)) )))"/> > > <xsl:for-each select="1 to > $noOfSegments"> > <xsl:variable > name="hope" select="position() * 4"/> > <L5Segment> > > <xsl:if test="($refs/CDE)[$hope - 4]"> > > <_1st_Address_type_Code> > > <xsl:value-of > select="$adrTyp"/> > > </_1st_Address_type_Code> > > <_1st_Reference_Code> > > <xsl:value-of > select="($refs/CDE)[$hope - 4]"/> > > </_1st_Reference_Code> > > <_1st_Reference> > > <xsl:value-of > select="($refs/VAL)[$hope - 4]"/> > > </_1st_Reference> > > </xsl:if> > > <xsl:if test="($refs/CDE)[$hope - 3]"> > > <_2nd_Address_type> > > <xsl:value-of > select="$adrTyp"/> > > </_2nd_Address_type> > > <_2nd_Reference_Code> > > <xsl:value-of > select="($refs/CDE)[$hope - 3]"/> > > </_2nd_Reference_Code> > > <_2nd_Reference> > > <xsl:value-of > select="($refs/VAL)[$hope - 3]"/> > > </_2nd_Reference> > > </xsl:if> > > <xsl:if test="($refs/CDE)[$hope - 2]"> > > <_3rd_Address_type> > > <xsl:value-of > select="$adrTyp"/> > > </_3rd_Address_type> > > <_3rd_Reference_Code> > > <xsl:value-of > select="($refs/CDE)[$hope - 2]"/> > > </_3rd_Reference_Code> > > <_3rd_Reference> > > <xsl:value-of > select="($refs/VAL)[$hope - 2]"/> > > </_3rd_Reference> > > </xsl:if> > > <xsl:if test="($refs/CDE)[$hope - 1]"> > > <_4th_Address_type> > > <xsl:value-of > select="$adrTyp"/> > > </_4th_Address_type> > > <_4th_Reference_Code> > > <xsl:value-of > select="($refs/CDE)[$hope - 1]"/> > > </_4th_Reference_Code> > > <_4th_Reference> > > <xsl:value-of > select="($refs/VAL)[$hope - 1]"/> > > </_4th_Reference> > > </xsl:if> > > </L5Segment> > </xsl:for-each> > </xsl:for-each> > > > --------------Input--------------- > <?xml version="1.0" encoding="UTF-8"?> > <DATA> > > > <ref:REF > ref:ADRTYP="FF"> > > <CDE>SRN</CDE> > > <VAL>4405050008759</VAL> > </ref:REF> > <ref:REF > ref:ADRTYP="MM"> > > <CDE>AAA</CDE> > > <VAL>3378781118759</VAL> > </ref:REF> > <ref:REF > ref:ADRTYP="NN"> > > <CDE>BBB</CDE> > > <VAL>2209094446927</VAL> > </ref:REF> > > <ref:REF > ref:ADRTYP="BB"> > > <CDE>BBB</CDE> > > <VAL>4405099999999</VAL> > </ref:REF> > <ref:REF > ref:ADRTYP="CC"> > > <CDE>CCC</CDE> > > <VAL>4444444418759</VAL> > </ref:REF> > <ref:REF > ref:ADRTYP="DD"> > > <CDE>DDD</CDE> > > <VAL>0000000046927</VAL> > </ref:REF> > <ref:REF > ref:ADRTYP="EE"> > > <CDE>EEE</CDE> > > <VAL>2020202020202</VAL> > </ref:REF> > <ref:REF > ref:ADRTYP="GG"> > > <CDE>GGG</CDE> > > <VAL>667676767676</VAL> > </ref:REF> > <ref:REF > ref:ADRTYP="JJ"> > > <CDE>JJJ</CDE> > > <VAL>2828282828282</VAL> > </ref:REF> > </DATA> > > --- G. Ken Holman <gkholman@xxxxxxxxxxxxxxxxxxxx> > schrieb am So, 24.6.2012: > > > Von: G. Ken Holman <gkholman@xxxxxxxxxxxxxxxxxxxx> > > Betreff: Re: build group of elements > > An: xsl-list@xxxxxxxxxxxxxxxxxxxxxx, > xsl-list@xxxxxxxxxxxxxxxxxxxxxx > > Datum: Sonntag, 24. Juni, 2012 20:09 Uhr > > At 2012-06-24 17:54 +0100, henry > > human wrote: > > >Ken, unfortunatelly the elments in the output has > > different prefixes such as: > > > > > ><_1st_ > > ><_2nd_ > > ><_3rd_ > > >The names must contain the above prefixes > > >Your script builds only : > > ><_1_elment > > ><_1_elment > > ><_2_elment > > ><_3_elment > > > > Why do you say this? Did you not look at the results > I > > added to my > > post? I gave you my evidence that the correct result > > is obtained > > with my stylesheet ... look below again and you will > see > > that what > > you want is produced using a conforming XSLT 2 > processor (in > > my case > > I always use Saxon). > > > > Maybe you get incorrect results on your machine, but > it > > works as you > > wish on mine. If you aren't getting what I'm > getting, > > then I suggest > > your processor is not supporting the XSLT 2 ordinal= > > attribute for > > <xsl:number/>. > > > > . . . . . . . . Ken > > > > >--- G. Ken Holman <gkholman@xxxxxxxxxxxxxxxxxxxx> > > schrieb am So, 24.6.2012: > > > > > > > Von: G. Ken Holman <gkholman@xxxxxxxxxxxxxxxxxxxx> > > > > Betreff: Re: build group of elements > > > > An: xsl-list@xxxxxxxxxxxxxxxxxxxxxx, > > xsl-list@xxxxxxxxxxxxxxxxxxxxxx > > > > Datum: Sonntag, 24. Juni, 2012 17:11 Uhr > > > > At 2012-06-24 15:41 +0100, henry > > > > human wrote: > > > > > sorry for my mistake..again the input > xml > > data and the > > > > expecting output: > > > > > The xml data has many foo elements > (1000). > > > > > > > > Just by conjecture, I'm guessing you want > > <fooGroup> > > > > to be three groups of three. You don't > > explain the > > > > criteria, but that is the only "meaningful" > > interpretation I > > > > can see. Next time it would help if you > > could explain > > > > your requirements when including an example > rather > > than make > > > > us guess by looking at your example. > > > > > > > > If I've guessed correctly, this is done > easiest > > with > > > > adjacent grouping. > > > > > > > > I hope this helps. > > > > > > > > . . . . . . . . . Ken > > > > > > > > ~/t/ftemp $ cat henry.xml > > > > <?xml version="1.0" encoding="UTF-8"?> > > > > <xmldata> > > > > <ss> s </ss> > > > > <nn>n </nn> > > > > <foo>tt</foo> > > > > <foo>bb</foo> > > > > <foo>aa</foo> > > > > <foo>mm</foo> > > > > > > <foo>ll</foo> > > > > > > <foo>nn</foo> > > > > > > <foo>ff</foo> > > > > > > > > <foo>gg</foo> > > > > > > <foo>ii</foo> > > > > <hh>h</hh> > > > > </xmldata> > > > > ~/t/ftemp $ xslt2 henry.xml henry.xsl > > > > <?xml version="1.0" encoding="UTF-8"?> > > > > <fooGroup> > > > > <_1st_element> > > > > > > > > <_1st_element>tt</_1st_element> > > > > > > > > <_2nd_element>bb</_2nd_element> > > > > > > > > <_3rd_element>aa</_3rd_element> > > > > </_1st_element> > > > > <_2nd_element> > > > > > > > > <_1st_element>mm</_1st_element> > > > > > > > > <_2nd_element>ll</_2nd_element> > > > > > > > > <_3rd_element>nn</_3rd_element> > > > > </_2nd_element> > > > > <_3rd_element> > > > > > > > > <_1st_element>ff</_1st_element> > > > > > > > > <_2nd_element>gg</_2nd_element> > > > > > > > > <_3rd_element>ii</_3rd_element> > > > > </_3rd_element> > > > > </fooGroup>~/t/ftemp $ > > > > ~/t/ftemp $ cat henry.xsl > > > > <?xml version="1.0"?> > > > > <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" > > > > xmlns:h="urn:X-henry" > > exclude-result-prefixes="h" > > > > version="2.0"> > > > > > > > > <xsl:output indent="yes"/> > > > > > > > > <xsl:template match="xmldata"> > > > > <xsl:for-each-group > > select="foo" > > > > > > > > > > group-adjacent="(position()-1) idiv > > > > 9"> > > > > <fooGroup> > > > > > > <xsl:for-each-group > > > > select="current-group()" > > > > > > > > > > > > group-adjacent="(position()-1) idiv 3"> > > > > > > <xsl:element > > > > name="_{h:ord(position())}_element"> > > > > > > <xsl:for-each > > > > select="current-group()"> > > > > > > <xsl:element > > > > name="_{h:ord(position())}_element"> > > > > > > > > <xsl:copy-of select="node()"/> > > > > > > > > </xsl:element> > > > > > > </xsl:for-each> > > > > > > </xsl:element> > > > > > > </xsl:for-each-group> > > > > </fooGroup> > > > > </xsl:for-each-group> > > > > </xsl:template> > > > > > > > > <xsl:function name="h:ord"> > > > > <xsl:param name="pos"/> > > > > <xsl:number value="$pos" > > ordinal="1"/> > > > > </xsl:function> > > > > > > > > </xsl:stylesheet> > > > > ~/t/ftemp $ > > > > > > -- > > Public XSLT, XSL-FO, UBL and code list classes in > Europe -- > > Oct 2012 > > Contact us for world-wide XML consulting and > instructor-led > > training > > Free 5-hour lecture: http://www.CraneSoftwrights.com/links/udemy.htm > > 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 > > > > > > > --~------------------------------------------------------------------ > > XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list > > To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/ > > or e-mail: <mailto:xsl-list-unsubscribe@xxxxxxxxxxxxxxxxxxxxxx> > > --~-- > > > > > > --~------------------------------------------------------------------ > XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list > To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/ > or e-mail: <mailto:xsl-list-unsubscribe@xxxxxxxxxxxxxxxxxxxxxx> > --~--
|
PURCHASE STYLUS STUDIO ONLINE TODAY!Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced! Download The World's Best XML IDE!Accelerate XML development with our award-winning XML IDE - Download a free trial today! Subscribe in XML format
|