|
Subject: Re: [xsl] build group of elements From: henry human <henry_human@xxxxxxxx> Date: Mon, 25 Jun 2012 14:51:52 +0100 (BST) |
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: [xsl]
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: [xsl] 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: [xsl]
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>
> --~--
| Current Thread |
|---|
|
| <- Previous | Index | Next -> |
|---|---|---|
| Re: [xsl] build group of elements, henry human | Thread | Re: [xsl] build group of elements, David Carlisle |
| Re: [xsl] build group of elements, henry human | Date | Re: [xsl] build group of elements, G. Ken Holman |
| Month |