Home. 
.

transparent

transparent

transparent

Altova Mailing List Archives


Re: [xsl] Re: Search and Replace to add HTML tags

From: "G. Ken Holman" <gkholman@----------------.--->
To: xsl-list@-----.------------.---
Date: 7/1/2009 2:06:00 PM
At 2009-07-01 09:10 -0400, Sharon_Harris@u... 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@C...
Male Cancer Awareness Nov'07  http://www.CraneSoftwrights.com/s/bc
Legal business disclaimers:  http://www.CraneSoftwrights.com/legal


--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe@l...>
--~--



transparent
Print
Mail
Like It
Disclaimer
.

These Archives are provided for informational purposes only and have been generated directly from the Altova mailing list archive system and are comprised of the lists set forth on www.altova.com/list/index.html. Therefore, Altova does not warrant or guarantee the accuracy, reliability, completeness, usefulness, non-infringement of intellectual property rights, or quality of any content on the Altova Mailing List Archive(s), regardless of who originates that content. You expressly understand and agree that you bear all risks associated with using or relying on that content. Altova will not be liable or responsible in any way for any content posted including, but not limited to, any errors or omissions in content, or for any losses or damage of any kind incurred as a result of the use of or reliance on any content. This disclaimer and limitation on liability is in addition to the disclaimers and limitations contained in the Website Terms of Use and elsewhere on the site.

.
.

transparent

transparent