Subject: Re: [xsl] variables and inline tags From: Spencer Tickner <spencertickner@xxxxxxxxx> Date: Wed, 4 May 2005 15:09:14 -0700 |
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>, <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> <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 |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] variables and inline tags, Wendell Piez | Thread | Re: [xsl] variables and inline tags, Spencer Tickner |
RE: [xsl] How can I get context nod, Jaime Stuardo | Date | Re: [xsl] Remove Duplicates from Re, Patrick Lademan |
Month |