Hi Marcus,
When this kind of thing appears, the simplest solution is to isolate just
the bit that changes from the rest of the code:
At 08:35 PM 5/13/2004, you wrote:
<xsl:template name="rule">
<xsl:param name="uri"/>
<xsl:variable name="prefix" select="../@prefix"/>
<res:choose>
<res:when test="*[name() = '{$prefix}:rule']">
<xsl:element name="{$prefix}:rule" namespace="{$uri}">
<xsl:if test="string(@display)">
<xsl:attribute name="displayValue">{<xsl:value-of
select="@display"/>}</xsl:attribute>
</xsl:if>
<xsl:attribute name="uid">{*[name() = '<xsl:value-of
select="$prefix"/>:rule']/@uid}</xsl:attribute>
<xsl:attribute name="xpath">{$newXpath}</xsl:attribute>
<xsl:attribute name="type">{$type}</xsl:attribute>
<xsl:copy-of select="@*|node()"/>
</xsl:element>
</res:when>
<res:otherwise>
<xsl:element name="{$prefix}:rule" namespace="{$uri}">
<xsl:if test="string(@display)">
<xsl:attribute name="displayValue">{<xsl:value-of
select="@display"/>}</xsl:attribute>
</xsl:if>
<xsl:attribute name="uid">{generate-id()}_<xsl:value-of
select="$prefix"/></xsl:attribute>
<xsl:attribute name="xpath">{$newXpath}</xsl:attribute>
<xsl:attribute name="type">{$type}</xsl:attribute>
<xsl:copy-of select="@*|node()"/>
</xsl:element>
</res:otherwise>
</res:choose>
</xsl:template>
<xsl:template name="rule">
<xsl:param name="uri"/>
<xsl:variable name="prefix" select="../@prefix"/>
<xsl:element name="{$prefix}:rule" namespace="{$uri}">
<xsl:if test="string(@display)">
<xsl:attribute name="displayValue">{<xsl:value-of
select="@display"/>}</xsl:attribute>
</xsl:if>
<xsl:attribute name="uid">
<res:choose>
<res:when test="*[name() = '{$prefix}:rule']">
<xsl:text>{*[name() = '</xsl:text>
<xsl:value-of select="$prefix"/>
<xsl:text>:rule']/@uid}</xsl:text>
</res:when>
<res:otherwise>
<xsl:text>{generate-id()}_</xsl:text>
<xsl:value-of select="$prefix"/>
</res:otherwise>
</res:choose>
</xsl:attribute>
<xsl:attribute name="xpath">{$newXpath}</xsl:attribute>
<xsl:attribute name="type">{$type}</xsl:attribute>
<xsl:copy-of select="@*|node()"/>
</xsl:element>
</xsl:template>
You can isolate this logic further:
<xsl:template name="rule">
<xsl:param name="uri"/>
<xsl:variable name="prefix" select="../@prefix"/>
<xsl:variable name="uid-assign">
<res:choose>
<res:when test="*[name() = '{$prefix}:rule']">
<xsl:text>{*[name() = '</xsl:text>
<xsl:value-of select="$prefix"/>
<xsl:text>:rule']/@uid}</xsl:text>
</res:when>
<res:otherwise>
<xsl:text>{generate-id()}_</xsl:text>
<xsl:value-of select="$prefix"/>
</res:otherwise>
</res:choose>
</xsl:variable>
<xsl:element name="{$prefix}:rule" namespace="{$uri}">
<xsl:if test="string(@display)">
<xsl:attribute name="displayValue">{<xsl:value-of
select="@display"/>}</xsl:attribute>
</xsl:if>
<xsl:attribute name="uid">
<xsl:value-of select="$uid-assign"/>
</xsl:attribute>
<xsl:attribute name="xpath">{$newXpath}</xsl:attribute>
<xsl:attribute name="type">{$type}</xsl:attribute>
<xsl:copy-of select="@*|node()"/>
</xsl:element>
</xsl:template>
which can be handy for parameterization, shortening the syntax, etc.
(You will want to straighten up the indents in that code.)
I hope that helps.
Wendell
Sorry about the long lines.
Thanks
/Marcus
--+------------------------------------------------------------------
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(_at_)lists(_dot_)mulberrytech(_dot_)com>
--+--
___&&__&_&___&_&__&&&__&_&__&__&&____&&_&___&__&_&&_____&__&__&&_____&_&&_
"Thus I make my own use of the telegraph, without consulting
the directors, like the sparrows, which I perceive use it
extensively for a perch." -- Thoreau