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

Subject: Re: [xsl] Re: Search and Replace to add HTML tags
From: "G. Ken Holman" <gkholman@xxxxxxxxxxxxxxxxxxxx>
Date: Wed, 01 Jul 2009 10:04:53 -0400
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