[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message] RE: Multiple String Replacements [with a twist]
I would like to use XSLT 1.0 if possible, since the idea is that IE will get
the xml file and parse the output.
Here is my code (this is just a short example I created to make sure that what I wanted was possible to do, before I applied it to my real files, but if it works here I can translate it) XSLT FILE: --------------- <?xml version="1.0"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <!-- reusable replace-string function --> <xsl:template name="replace-string"> <xsl:param name="text"/> <xsl:param name="from"/> <xsl:param name="to"/> <xsl:choose> <xsl:when test="contains($text, $from)"> <xsl:variable name="before" select="substring-before($text, $from)"/> <xsl:variable name="after" select="substring-after($text, $from)"/> <xsl:variable name="prefix" select="concat($before, $to)"/> <xsl:copy-of select="$before"/> <xsl:copy-of select="$to"/> <xsl:call-template name="replace-string"> <xsl:with-param name="text" select="$after"/> <xsl:with-param name="from" select="$from"/> <xsl:with-param name="to" select="$to"/> </xsl:call-template> </xsl:when> <xsl:otherwise> <xsl:copy-of select="$text"/> </xsl:otherwise> </xsl:choose> </xsl:template>
<xsl:param name="returnString"> <xsl:call-template name="replace-string"> <xsl:with-param name="text" select="$text"/> <xsl:with-param name="from" select="$changes/change[$count]/text" /> <xsl:with-param name="to" select="$changes/change[$count]/link" /> </xsl:call-template> </xsl:param> <xsl:if test="$count > 1"> <xsl:call-template name="replace-strings"> <xsl:with-param name="text"> <xsl:copy-of select="$returnString" /> </xsl:with-param> <xsl:with-param name="changes" select="$changes" /> <xsl:with-param name="count" select="$count - 1" /> </xsl:call-template> </xsl:if> <xsl:if test="$count = 1"> <xsl:copy-of select="$returnString" /> </xsl:if> </xsl:template> <!-- test the function --> <xsl:template match="/"> <html> <body> <h2>My Collection</h2> <table border="1"> <tr bgcolor="#9acd32"> <th align="left">Title</th> <th align="left">Artist</th> <th align="left">Change#</th> </tr> <xsl:for-each select="catalog/cd"> <tr> <td> <xsl:choose> <xsl:when test="count(changes/change) > 0"> <xsl:call-template name="replace-strings"> <xsl:with-param name="text" select="title"/> <xsl:with-param name="changes" select="changes"/> <xsl:with-param name="count" select="count(changes/change)" /> </xsl:call-template> </xsl:when> <xsl:otherwise> <xsl:value-of select="title" /> </xsl:otherwise> </xsl:choose> </td> <td><xsl:value-of select="artist"/></td> <td> <xsl:value-of select="count(changes/change)" /> </td> </tr> </xsl:for-each> </table> </body> </html> </xsl:template> <xsl:template match="NewTemplate"> </xsl:template> </xsl:stylesheet> ------------------------------------- XML FILE: -------------------------------------- <?xml version="1.0" encoding="ISO-8859-1"?> <?xml-stylesheet type="text/xsl" href="cdcatalog_test.xsl" ?> <catalog> <cd> <title>The [[Fire]] of [[Athens]]</title> <artist>John Lewis</artist> <country>USA</country> <company>Columbia</company> <price>10.90</price> <year>1985</year> <changes> <change> <text>[[Fire]]</text> <link><a href="http://en.wikipedia.org/wiki/Fire">Fire</a></link> </change> <change> <text>[[Athens]</text> <link><a href="http://en.wikipedia.org/wiki/Athens">Athens</a></link> </change> </changes> </cd> <cd> <title>Hide your heart</title> <artist>Bonnie Tyler</artist> <country>UK</country> <company>CBS Records</company> <price>9.90</price> <year>1988</year> <changes/> </cd> <cd> <title>Greatest Hits</title> <artist>Dolly Parton</artist> <country>USA</country> <company>RCA</company> <price>9.90</price> <year>1982</year> <changes/> </cd> </catalog> ------------------------------------------------- I placed the [[ ]] around the words I want replaced, because in my actual files there are instances that have to be replaced and others that don't, so I will add some kind of character code to differenciate them. Thank you. From: "Michael Kay" <mike@xxxxxxxxxxxx> Reply-To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx To: <xsl-list@xxxxxxxxxxxxxxxxxxxxxx> Subject: RE: Multiple String Replacements [with a twist] Date: Wed, 28 Mar 2007 00:13:25 +0100
|
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
|