This is the mail archive of the
xsl-list@mulberrytech.com
mailing list .
Fill the value for multiple element items from preceding non-empty element
- From: "E100 SFYang" <SFYang at unisvr dot net dot tw>
- To: <xsl-list at lists dot mulberrytech dot com>
- Date: Wed, 5 Dec 2001 08:46:42 +0800
- Subject: [xsl] Fill the value for multiple element items from preceding non-empty element
- Reply-to: xsl-list at lists dot mulberrytech dot com
Hi, Dear listers;
I have a xml like as following:
*** xml list **
<docs>
<row>
<id>1</id>
<key>10</key>
</row>
<row>
<id></id>
<key></key>
</row>
<row>
<id>3</id>
<key>12</key>
</row>
<row>
<id></id>
<key></key>
</row>
<row>
<id></id>
<key>10</key>
</row>
</docs>
and want to fill the empty stream with the value from preceding
corresponding element
** desired transformed xml list ***
<docs>
<row>
<id>1</id>
<key>10</key>
</row>
<row>
<id>1</id>
<key>10</key>
</row>
<row>
<id>3</id>
<key>12</key>
</row>
<row>
<id>3</id>
<key>12</key>
</row>
<row>
<id>3</id>
<key>10</key>
</row>
</docs>
I can get transformation from following xsl list; but since it deal
with
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>
sfyang@unisvr.net.tw
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list