This is the mail archive of the
xsl-list@mulberrytech.com
mailing list .
Re: Fill the value for multiple element items from preceding non-empty element
- From: =?utf-8?Q?J=C3=B6rg_Heinicke?= <joerg dot heinicke at gmx dot de>
- To: <xsl-list at lists dot mulberrytech dot com>
- Date: Wed, 5 Dec 2001 08:47:03 +0100
- Subject: Re: [xsl] Fill the value for multiple element items from preceding non-empty element
- References: <B71749B28A5E5C46BF8656EF567A11C70FB04D@netbe06.net.unimis>
- Reply-to: xsl-list at lists dot mulberrytech dot com
<xsl:template match="id|key">
<xsl:choose>
<xsl:when test="not(string(.))">
<xsl:element name="{name()}">
<xsl:value-of select="preceding::*[name() = name(current())
and string(.)][1]"/>
</xsl:element>
</xsl:when>
<xsl:otherwise>
<xsl:copy-of select="."/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
With <xsl:element> and name() you can shorten your code as above.
Regards,
Joerg
> I can get transformation from following xsl list; but since it deal
> with multiple empty stream items (in my case, id and key),
> I feel it is cumbsome to use a lot of xpath
> preceding expression and xsl:choose elements explicitly.
> Is there a neat and clean way for this kind of transformation
> task? Thanks.
> .
> *** xslt ****
> <?xml version="1.0"?>
> <xsl:stylesheet version="1.0"
> xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
> <xsl:template match="node()">
> <xsl:copy>
> <xsl:apply-templates select="node()"/>
> </xsl:copy>
> </xsl:template>
> <xsl:template match="id|key">
> <xsl:choose>
> <xsl:when test="not(string(.))">
> <xsl:choose><!-- check id element -->
> <xsl:when test="name(.)='id'">
> <id><xsl:value-of select="preceding::id[string(.)][1]"/></id>
> </xsl:when>
> <xsl:when test="name(.)='key'"><!-- check key element -->
> <key><xsl:value-of select="preceding::key[string(.)][1]"/></key>
> </xsl:when>
> <xsl:otherwise/>
> </xsl:choose>
> </xsl:when>
> <xsl:otherwise><xsl:copy-of select="."/></xsl:otherwise>
> </xsl:choose>
> </xsl:template>
> </xsl:stylesheet>
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list