|
[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message] Fill the value for multiple element items from precedi
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@xxxxxxxxxxxxx
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








