[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
|