This is the mail archive of the xsl-list@mulberrytech.com mailing list .


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Fill the value for multiple element items from preceding non-empty element


<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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]