Subject: [xsl] Re: Search and Replace to add HTML tags From: Sharon_Harris@xxxxxxxxxxxxxxxxxxxx Date: Mon, 6 Jul 2009 10:26:18 -0400 |
Hi, Thank you again for your explanation. I definitely have a much better understanding. Your solution worked perfectly! I am trying to achieve the same result using XSLT-FO. Unfortunately I am not getting the desired results. What is happening is that the entire output for the node is displayed in bold instead of the specific words and then the string is repeated but without the bold, and the urls are not active hyperlinks. Here is the code I am using: XSLT-FO excerpt: <xsl:template match="Release_Notes_Documentation"> <xsl:param name="string" select="string(.)"/> <fo:table-cell xsl:use-attribute-sets="TableCell"> <fo:block xsl:use-attribute-sets=" HyphenateUseZeroWidthSpace"> <xsl:analyze-string select="." regex="Before:| Enhancement:|Informational:|Note:|Now:"> <xsl:matching-substring> <fo:inline xsl:use-attribute-sets=" TextBold"> <xsl:value-of select="."/> </fo:inline> </xsl:matching-substring> <xsl:non-matching-substring> <xsl:call-template name="hyperlink"/> </xsl:non-matching-substring> </xsl:analyze-string> </fo:block> </fo:table-cell> </xsl:template> <xsl:template name="hyperlink"> <xsl:param name="string" select="string(.)"/> <xsl:analyze-string select="$string" regex="http://[^ ]+"> <xsl:matching-substring> <fo:basic-link xsl:use-attribute-sets="Hyperlink"> <xsl:attribute name="external-destination">< xsl:value-of select="."/></xsl:attribute> </fo:basic-link> </xsl:matching-substring> <xsl:non-matching-substring> <xsl:value-of select="."/> </xsl:non-matching-substring> </xsl:analyze-string> </xsl:template> XML excerpt: <Row> <ReleaseNote>Before: The application did this. Now: The application does this. Here is a link: http://myurl.com Note: The application may also do this.</ReleaseNote> </Row> <Row> <ReleaseNote>Before: The application did not do this. Now: The application does this.</ReleaseNote> </Row> Thanks for your help! _______________________________ Sharon Goldner Harris Knowledge Management Evangelist Ultimate Software Group 704-660-6482 Confidentiality Note: This e-mail message and any attachments to it are intended only for the named recipients and may contain legally privileged and/or confidential information. If you are not one of the intended recipients, do not duplicate or forward this e-mail message. ********************************************* ***************************************************** From: G. Ken Holman <gkholman@xxxxxxxxxxxxxxxxxxxx> Date: Wed, Jul 1, 2009 at 10:04 AM Subject: Re: [xsl] Re: Search and Replace to add HTML tags To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx At 2009-07-01 09:10 -0400, Sharon_Harris@xxxxxxxxxxxxxxxxxxxx wrote: One more thing I am trying to do within the same node is to search for any text that starts w/ "http://" and take that and the text that follows it and turn it into an active hyperlink. Sounds good. Another role for <xsl:analyze-string/> This is the code I was using to perform this action and now understand that I need to combine this along w/ the action for searching for specific words and wrapping tags around them within the same template definition (ReleaseNote). Unfortunately, I have not been successful and do not understand how to perform 2 different search and replace functions within the same node. Indeed ... you need to know that template rules are mutually exclusive and for every node that arrives only one template gets matched. Therefore, you need to approach this a similar way to how you approached the nested replace functions ... there you were acting on the second replace with the results of the third, and the first replace with the results of the second. Now you need to nest the string analysis. Here is the original code which obviously does not work as the ReleaseNote template definition overwrites the changes made from the text template definition. But I do not understand how to combine both actions within the ReleaseNote template definition. You can take advantage of the template rule you've written, or you could write the analysis inline. For my example below, I've re-used what you've created. I'm assuming you've parameterized the template in order to take advantage of it elsewhere ... otherwise your assignment provides no benefit. Oh, one thing you missed is that my use of <xsl:copy> was to preserve <ReleaseNotes> for your example ... since you are now creating pure HTML, you shouldn't be preserving that input element. I hope this helps. You've moved quickly in understanding what needs to be done. . . . . . . . . . Ken p.s. Happy Canada day holiday to all Canadian readers! t:\>type sharon.xml <test> <Row> <ReleaseNote>Before: The application did this. Now: The application does this. Here is a link: http://myurl.com Note: The application may also do this.</ReleaseNote> </Row> <Row> <ReleaseNote>Before: The application did not do this. Now: The application does this.</ReleaseNote> </Row> </test> t:\>xslt2 sharon.xml sharon.xsl <?xml version="1.0" encoding="UTF-8"?><test> <Row> <td><b>Before:</b> The application did this. <b>Now:</b> The application does this. Here is a link: <a href="http://myurl.com" target="new"> http://myurl.com</a> <b>Note:</b> The application may also do this.</td> </Row> <Row> <td><b>Before:</b> The application did not do this. <b>Now:</b> The application does this.</td> </Row> </test> t:\>type sharon.xsl <?xml version="1.0" encoding="US-ASCII"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0"> <xsl:template match="ReleaseNote"> <td> <xsl:analyze-string select="." regex="Before:|Enhancement:|Informational:|Note:|Now:"> <xsl:matching-substring> <b><xsl:value-of select="."/></b> </xsl:matching-substring> <xsl:non-matching-substring> <xsl:call-template name="hyperlink"/> </xsl:non-matching-substring> </xsl:analyze-string> </td> </xsl:template> <xsl:template name="hyperlink"> <xsl:param name="string" select="string(.)"/> <xsl:analyze-string select="$string" regex="http://[^ ]+"> <xsl:matching-substring> <a href="{.}" target="new"> <xsl:value-of select="."/> </a> </xsl:matching-substring> <xsl:non-matching-substring> <xsl:value-of select="."/> </xsl:non-matching-substring> </xsl:analyze-string> </xsl:template> <xsl:template match="@*|node()"><!--identity for all other nodes--> <xsl:copy> <xsl:apply-templates select="@*|node()"/> </xsl:copy> </xsl:template> </xsl:stylesheet> t:\> -- Possible July/August XSLT/XQuery/XSL-FO training in Oakland/CA/USA Crane Softwrights Ltd. http://www.CraneSoftwrights.com/s/ Training tools: Comprehensive interactive XSLT/XPath 1.0/2.0 video Video lesson: http://www.youtube.com/watch?v=PrNjJCh7Ppg&fmt=18 Video overview: http://www.youtube.com/watch?v=VTiodiij6gE&fmt=18 G. Ken Holman mailto:gkholman@xxxxxxxxxxxxxxxxxxxx Male Cancer Awareness Nov'07 http://www.CraneSoftwrights.com/s/bc Legal business disclaimers: http://www.CraneSoftwrights.com/legal
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] Re: Search and Replace to, G. Ken Holman | Thread | Re: [xsl] Re: Search and Replace to, G. Ken Holman |
Re: [xsl] how to xpath the *value* , George Cristian Bina | Date | Re: [xsl] Re: Search and Replace to, G. Ken Holman |
Month |