Subject: Re: [xsl] Trying to ignore specific tags with no content From: Brandon Ibach <brandon.ibach@xxxxxxxxxxxxxxxxxxx> Date: Thu, 2 Jun 2011 14:57:08 -0400 |
Leave your existing template as it is and add: <xsl:template match="strong[normalize-space(.) = '']" mode="inline"/> Note that the marks between the "=" and "]" are two single-quotes. Due to the non-trivial match pattern, this will be a higher-priority template than your existing one, so it will override it for the cases that it matches. The normalize-space() function will trim whitespace from the start and end and collapse it in the middle, so it's very handy for "text content other than whitespace" tests. -Brandon :) On Thu, Jun 2, 2011 at 12:24 PM, Paul Chernoff <pchernoff@xxxxxxxxxxxxxxxxx> wrote: > Despite doing XSLT work for the past few years I still feel like a novice. I have hit the wall on a specific problem which I should think would be easy to solve. > > BACKGROUND > I am processing a XML file that I want to convert to HTML. Everything works fine unless there is an empty <strong /> tag in it. This happens because the source document originated from Adobe InCopy and in cutting a pasting a bold style that is applied to the space between characters is left in the document. My XSLT ends up creating a <strong /> tag in this case which is disliked by web browsers, they see this as a "begin strong tag" resulting in bolding that is never turned off. > > My XSLT is taking a intermediary XML file, not the XML generated directly from InCopy. > > MY CODE > When I get to processing the contents of the document I use a bunch of xsl:template tags. I never know if any paragraphs will have strong, em, or br tags within it. > > Here is a snippet of the XML document being processed: > <Main_Body> > <strong>For the Quads</strong> > </Main_Body> > <Main_Body>Place one foot on a step or bench so the quadricep is parallel to the floor. > Place the Stick on the top of the quadricep and slowly roll it on top of the muscle > while applying pressure. Continue rolling for about 30 seconds. Switch legs and > repeat.</Main_Body> > > Here is a snippet of the XSLT code: > > <xsl:template match="SubHead1" mode="inline"> > <h4 class="headline"><xsl:apply-templates mode="inline"/></h4> > </xsl:template> > <xsl:template match="SubHead2" mode="inline"> > <h5 class="subheadline"><xsl:apply-templates mode="inline"/></h5> > </xsl:template> > <xsl:template match="Main_Body" mode="inline"> > <p><xsl:apply-templates mode="inline"/></p> > </xsl:template> > <xsl:template match="strong" mode="inline"> > <strong><xsl:apply-templates mode="inline"/></strong> > </xsl:template> > <xsl:template match="em" mode="inline"> > <em><xsl:apply-templates mode="inline"/></em> > </xsl:template> > <xsl:template match="a" mode="inline"> > <xsl:copy-of select="." copy-namespaces="no"/> > </xsl:template> > <xsl:template match="br" mode="inline"> > <br/> > </xsl:template> > > My problem is that if 'match="strong"' and if the string of the strong tag is empty, I don't want to generate any results. I have attempted to use the xsl:if tag but it doesn't work because I am already in the contents of the <strong> tags. I have been attempting to put in some sort of conditional statement in the xsl:template when match="strong" to say 'if there is no content don't do anything'. I just can't think of any way of writing that. > > Or perhaps my approach is just wrong. > > Paul Chernoff > Director of Information Technology > Washingtonian Magazine
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] Trying to ignore specific, Martin Honnen | Thread | [xsl] Avoiding namespace generation, Jacobus Reyneke |
Re: [xsl] Avoiding namespace genera, Jacobus Reyneke | Date | [xsl] replace(), translate() and Un, Kenneth Reid Beesley |
Month |