Dear ALL,
I need some help on xsl:sequence. I'm using the Altova XSLT processor,but I'm quite confident it is not an processor issue. It's probably my bad knowledge of xslt 2.0.I have probably put more that required in the test case, but it basically covers my more complex code.
Here is the xml example source:
<?xml version="1.0" encoding="UTF-8"?>
<SeqTest>
<Item>otto_L</Item>
<Item>otto_L</Item>
<Item>otto_R</Item>
<Item>otto_L</Item>
<Item>karl_L</Item>
<Item>karl_R</Item>
<Item>nepumuk_L</Item>
</SeqTest>
My xslt
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0"
xmlnssl="http://www.w3.org/1999/XSL/Transform"
xmlnss="http://www.w3.org/2001/XMLSchema" >
<xslutput method="xml" version="1.0" encoding="UTF-8" indent="yes"/
>
<xsl:template match="/">
<DEBUG>
<xsl:for-each select="SeqTest/Item">
<ForeEach Pos="{position()}" Name="{.}"/>
</xsl:for-each>
<xsl:variable name="vSeq">
<xsl:for-each-group select="SeqTest/Item"
group-by="substring(.,1,string-length(.)-2)">
<xsl:variable name="vBaseName" s
elect="substring(.,1,string-length(.)-2)"/>
<xsl:if test="$vBaseName != 'nepumuk'">
<xsl:sequence select="$vBaseName"/>
</xsl:if>
</xsl:for-each-group>
</xsl:variable>
<Seq>
<xsl:for-each select="$vSeq">
<Item BaseName="{.}"/>
</xsl:for-each>
</Seq>
</DEBUG>
</xsl:template>
</xsl:stylesheet>
The UNEXPECTED result
<?xml version="1.0" encoding="UTF-8"?>
<DEBUG xmlnss="http://www.w3.org/2001/XMLSchema">
<ForeEach Pos="1" Name="otto_L"/>
<ForeEach Pos="2" Name="otto_L"/>
<ForeEach Pos="3" Name="otto_R"/>
<ForeEach Pos="4" Name="otto_L"/>
<ForeEach Pos="5" Name="karl_L"/>
<ForeEach Pos="6" Name="karl_R"/>
<ForeEach Pos="7" Name="nepumuk_L"/>
<Seq>
<Item BaseName="ottokarl"/>
</Seq>
</DEBUG>
As you can see the result element Item is only once there. For me it meas that I have not build a sequence of simple string values
over which I want to iterate. (Please see attribute BaseName="otokarl" which indicates that too )
WHAT IS WRONG HERE ?
any help ?
Bookmarks