[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message] Re: match string
Zsolt Szabs wrote:
Maybe I have found a solution. It works, at least with libxslt. is this correct? I think is is rather a hack. Didn't my solution work? I think your templates are correct but I'm not sure if they will produce correct results for paragraphs with 3 words or less. Also, I have the impression that they will only display the first 3 words and skip the rest?
I don't know what your template name="para.template" does, but if you only want to split the words on the first paragraph of every chapter, and just copy all the others, you could do with an identity template and a match like David suggested: <?xml version="1.0" encoding="utf-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="xml" version="1.0" encoding="utf-8" indent="yes"/> <xsl:strip-space elements="*"/> <xsl:param name="split" select="3"/> <!-- identity template: copy all elements --> <xsl:template match="*"> <xsl:copy> <xsl:copy-of select="@*"/> <xsl:apply-templates/> </xsl:copy> </xsl:template> <!-- override on first paragraph of each chapter --> <xsl:template match="chapter/section[1]/para[1]//text()[1]"> <xsl:call-template name="splitwords"/> </xsl:template> <xsl:template name="splitwords"> <xsl:param name="i" select="0"/> <xsl:param name="str1" select="''"/> <xsl:param name="str2" select="normalize-space(.)"/> <xsl:choose> <xsl:when test="$i = $split"> <b><xsl:value-of select="$str1"/></b> <xsl:value-of select="$str2"/> </xsl:when> <xsl:otherwise> <xsl:choose> <xsl:when test="contains($str2,' ')"> <xsl:call-template name="splitwords"> <xsl:with-param name="i" select="$i+1"/> <xsl:with-param name="str1" select="concat($str1,substring-before($str2,' '),' ')"/> <xsl:with-param name="str2" select="substring-after($str2,' ')"/> </xsl:call-template> </xsl:when> <xsl:otherwise> <xsl:call-template name="splitwords"> <xsl:with-param name="i" select="$split"/> <xsl:with-param name="str1" select="concat($str1,$str2)"/> <xsl:with-param name="str2" select="''"/> </xsl:call-template> </xsl:otherwise> </xsl:choose> </xsl:otherwise> </xsl:choose> </xsl:template> </xsl:stylesheet>
|
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
|