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

Re: variables and inline tags

Subject: Re: variables and inline tags
From: Spencer Tickner <spencertickner@xxxxxxxxx>
Date: Wed, 4 May 2005 15:09:14 -0700
xsl truncate text
Hi Guys,

Thanks for the great feed-back. It took a bit to figure out how to
modify your template to work in my context (I was matching text-nodes
to remove excess whitespace around inline tags), but I got her working
so thanks for comming through once again.

Cheers,

Spencer

On 5/4/05, Wendell Piez <wapiez@xxxxxxxxxxxxxxxx> wrote:
> Spencer,
>
> The tricky thing here is that to remove the comma without messing with the
> other nodes (as you discovered, when you use the value of the <def> its
> children aren't processed), you need to get at it all the way down at the
> level of the text node. But not just any text node is of interest --
> actually it's only those that are the first thing inside a <def>, which
> have a comma.
>
> So:
>
> <xsl:template match="def/text()">
>    <!-- when a text node is inside a def, this template
>         overrides the built-in template for text nodes,
>         which simply copies out their values -->
>    <xsl:when test="not(preceding-sibling::node() and starts-with(.,',')">
>      <!-- truncates the first character if it's a comma and this text
>           node has no preceding siblings -->
>      <xsl:value-of select="substring(., 2)"/>
>    </xsl:when>
>    <xsl:otherwise>
>      <xsl:value-of select="."/>
>    </xsl:otherwise>
> </xsl:template>
>
> You may have to adjust this match pattern, or even construct a separate
> mode, to keep this sufficiently isolated from the way you want most text
> nodes to be processed. (I assume you generally don't want to truncate
> initial commas in text nodes.) And it will work irrespective of whether the
> results are bound to a variable, or simply copied out.
>
> If it's mysterious to you why this works -- like most XSLT mysteries, it
> comes back to the processing model (that is, what the processor does when
> you say "apply-templates" or let it default to that).
>
> I hope this helps,
> Wendell
>
> At 04:52 PM 5/4/2005, you wrote:
> >Having problems with variables, applying templates and parsing
> >strings. Been working on it all day and can't seem to wrap my mind
> >around it.
> >
> >Here is my simplified xml:
> >
> ><definition>
> >   <term>recognized</term>
> >   <def>, under the <em>Company Act</em></def>
> ></definition>
> >
> >What I need to do is substring the def information when it starts with
> >a comma, ie:
> >
> >with comma
> ><p class="def">"recognized", under the <em>Company Act</em></p>
> >
> >without comma
> ><p class="def">"recognized" under the <em>Company Act</em></p>
> >
> >Ok, there's the background. I'm having problems because I'm using a
> >variable to parse out the unwanted space in the with comma example
> >above, then to get the variable I use a value-of statement which
> >promptly drops the <em> tags. Any suggestions or advive would be
> >appreciated.
> >
> >
> >Here's my simplified xsl:
> >
> ><!-- Defintion -->
> ><xsl:template match="definition" mode="contentsection">
> >         <p class="def">
> >         <xsl:choose>
> >         <xsl:when test="substring(def, 1, 1)=','">
> >                 <strong>"<xsl:apply-templates
> >select="term"/>"</strong>,&#160;<xsl:variable name="uncommadef">
> >                         <xsl:apply-templates select="def"/>
> >                 </xsl:variable>
> >
> >                  <!-- Problem is here -->
> >                 <xsl:value-of select="substring($uncommadef, 2)"/>
> >         </xsl:when>
> >         <xsl:otherwise>
> >                 <strong>"<xsl:apply-templates
> >select="term"/>"</strong>&#160;<xsl:apply-templates select="def"/>
> >         </xsl:otherwise>
> >         </xsl:choose>
> >         </p>
> >  </xsl:template>
> >  <xsl:template match="term">
> >         <xsl:apply-templates
> > select="text()|strong|em|sup|sub|u|insert|br|eacute"/>
> >  </xsl:template>
> >  <xsl:template match="def">
> >         <xsl:apply-templates
> > select="text()|strong|em|sup|sub|u|insert|br|eacute"/>
> >  </xsl:template>
> ><!-- End of Definition -->
>
> ======================================================================
> Wendell Piez                            mailto:wapiez@xxxxxxxxxxxxxxxx
> Mulberry Technologies, Inc.                http://www.mulberrytech.com
> 17 West Jefferson Street                    Direct Phone: 301/315-9635
> Suite 207                                          Phone: 301/315-9631
> Rockville, MD  20850                                 Fax: 301/315-8285
> ----------------------------------------------------------------------
>    Mulberry Technologies: A Consultancy Specializing in SGML and XML
> ======================================================================

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.