|
[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message] Re: Fill the value for multiple element items from pre
<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
|
PURCHASE STYLUS STUDIO ONLINE TODAY!Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced! Download The World's Best XML IDE!Accelerate XML development with our award-winning XML IDE - Download a free trial today! Subscribe in XML format
|

Cart








