|
Subject: Re: [xsl] build group of elements From: "G. Ken Holman" <gkholman@xxxxxxxxxxxxxxxxxxxx> Date: Mon, 25 Jun 2012 10:57:59 -0300 |
Ken, thanks a lot your script is running and provide the result I expected for that data.
But now I have a more complicated case. The following script bellow we
created has a mistake but can't find what is wrong!!!
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>
~/t/ftemp $ cat henry3.xml
<?xml version="1.0" encoding="UTF-8"?>
<DATA xmlns:ref="urn:X-henry"> <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>~/t/ftemp $
~/t/ftemp $ xslt2 henry3.xml henry3.xsl
<?xml version="1.0" encoding="UTF-8"?>
<L5Segment>
<_1st_Address_type_Code>FF</_1st_Address_type_Code>
<_1st_Reference_Code>SRN</_1st_Reference_Code>
<_1st_Reference>4405050008759</_1st_Reference>
<_2nd_Address_type_Code>MM</_2nd_Address_type_Code>
<_2nd_Reference_Code>AAA</_2nd_Reference_Code>
<_2nd_Reference>3378781118759</_2nd_Reference>
<_3rd_Address_type_Code>NN</_3rd_Address_type_Code>
<_3rd_Reference_Code>BBB</_3rd_Reference_Code>
<_3rd_Reference>2209094446927</_3rd_Reference>
<_4th_Address_type_Code>BB</_4th_Address_type_Code>
<_4th_Reference_Code>BBB</_4th_Reference_Code>
<_4th_Reference>4405099999999</_4th_Reference>
</L5Segment>
<L5Segment>
<_1st_Address_type_Code>CC</_1st_Address_type_Code>
<_1st_Reference_Code>CCC</_1st_Reference_Code>
<_1st_Reference>4444444418759</_1st_Reference>
<_2nd_Address_type_Code>DD</_2nd_Address_type_Code>
<_2nd_Reference_Code>DDD</_2nd_Reference_Code>
<_2nd_Reference>0000000046927</_2nd_Reference>
<_3rd_Address_type_Code>EE</_3rd_Address_type_Code>
<_3rd_Reference_Code>EEE</_3rd_Reference_Code>
<_3rd_Reference>2020202020202</_3rd_Reference>
<_4th_Address_type_Code>GG</_4th_Address_type_Code>
<_4th_Reference_Code>GGG</_4th_Reference_Code>
<_4th_Reference>667676767676</_4th_Reference>
</L5Segment>
<L5Segment>
<_1st_Address_type_Code>JJ</_1st_Address_type_Code>
<_1st_Reference_Code>JJJ</_1st_Reference_Code>
<_1st_Reference>2828282828282</_1st_Reference>
</L5Segment>~/t/ftemp $
~/t/ftemp $ cat henry3.xsl
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:ref="urn:X-henry" exclude-result-prefixes="ref"
version="2.0"><xsl:template match="DATA">
<xsl:for-each-group select="ref:REF"
group-adjacent="(position()-1) idiv 4">
<L5Segment>
<xsl:for-each select="current-group()">
<xsl:variable name="ord">
<xsl:number value="position()" ordinal="1"/>
</xsl:variable>
<xsl:element name="_{$ord}_Address_type_Code">
<xsl:value-of select="@ref:ADRTYP"/>
</xsl:element>
<xsl:element name="_{$ord}_Reference_Code">
<xsl:value-of select="CDE"/>
</xsl:element>
<xsl:element name="_{$ord}_Reference">
<xsl:value-of select="VAL"/>
</xsl:element>
</xsl:for-each>
</L5Segment>
</xsl:for-each-group>
</xsl:template></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
| Current Thread |
|---|
|
| <- Previous | Index | Next -> |
|---|---|---|
| Re: [xsl] build group of elements, David Carlisle | Thread | [xsl] Xpath Syntax Issue, Nathan Tallman |
| Re: [xsl] build group of elements, henry human | Date | Re: [xsl] build group of elements, David Carlisle |
| Month |