putting <element> round group of same elements
As u can see in my code below i'm still an xslt newbie but i'm learning (slowly).
I have one problem I can't seem to solve : after processing i'll have a structure
<records>
<record>
<element1>...</element1>
<element2>...</element2>
....
<element9>...</element9>
<element9>...</element9>
</record>
</record>
<element1>...</element1>
<element2>...</element2>
...
<element9>...</element9>
<element9>...</element9>
<element9>...</element9>
</record>
I would like to group the <element9> elements in a <question> element
<records>
<record>
<element1>...</element1>
<element2>...</element2>
....
<question>
<element9>...</element9>
<element9>...</element9>
</question>
</record>
</record>
<element1>...</element1>
<element2>...</element2>
...
<question>
<element9>...</element9>
<element9>...</element9>
<element9>...</element9>
</question>
</record>
this is my code so far ...
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="part">
<records>
<xsl:apply-templates select="node()"/>
</records>
</xsl:template>
<xsl:template match="inline">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="document">
<xsl:apply-templates select="node()"/>
</xsl:template>
<xsl:template match="documentinfo">
<xsl:apply-templates select="node()"/>
</xsl:template>
<xsl:template match="property">
<xsl:apply-templates select="node()"/>
</xsl:template>
<xsl:template match="par[normalize-space(.) = 'start']">
<record>
<xsl:element name="element1">
<xsl:apply-templates select="node()"/>
</xsl:element>
<xsl:apply-templates select="following-sibling::par[1]" mode="renumber">
<xsl:with-param name="counter" select="2"/>
</xsl:apply-templates>
</record>
</xsl:template>
<xsl:template match="par">
</xsl:template>
<xsl:template match="par" mode="renumber">
<xsl:param name="counter"/>
<xsl:if test="normalize-space(.) != 'start'">
<xsl:element name="element{$counter}">
<xsl:apply-templates select="node()"/>
</xsl:element>
<xsl:if test="$counter < 9" >
<xsl:apply-templates select="following-sibling::par[1]" mode="renumber">
<xsl:with-param name="counter" select="1 + $counter"/>
</xsl:apply-templates>
</xsl:if>
<xsl:if test="$counter >= 9" >
<xsl:apply-templates select="following-sibling::par[1]" mode="renumber">
<xsl:with-param name="counter" select="9"/>
</xsl:apply-templates>
</xsl:if>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
if the easiest solution is another xslt processing, i'm ready to do so, as i'm running out of ideas.
thanx in advance
|