[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message]

Re: Search and Replace to add HTML tags

Subject: Re: Search and Replace to add HTML tags
From: Sharon_Harris@xxxxxxxxxxxxxxxxxxxx
Date: Mon, 6 Jul 2009 10:26:18 -0400
 Re: Search and Replace to add HTML tags
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:  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

PURCHASE STYLUS STUDIO ONLINE TODAY!

Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!

Buy Stylus Studio Now

Download The World's Best XML IDE!

Accelerate XML development with our award-winning XML IDE - Download a free trial today!

Don't miss another message! Subscribe to this list today.
Email
First Name
Last Name
Company
Subscribe in XML format
RSS 2.0
Atom 0.3
Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member
Stylus Studio® and DataDirect XQuery ™are products from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2013 All Rights Reserved.