xsl-list
[Top] [All Lists]

RE: [xsl] Denormalizing formatting

2012-10-08 16:25:02
Ken,

Thanks! That works wonderfully.

The output is necessary to aid in the display of formatting changes. The
tagging of the formatting changes will be more complex, but the
principle will hold.

-Charles

-----Original Message-----
From: G. Ken Holman [mailto:g(_dot_)ken(_dot_)holman(_at_)gmail(_dot_)com] On 
Behalf Of G. Ken
Holman
Sent: Monday, October 08, 2012 4:23 PM
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com; 
xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
Subject: Re: [xsl] Denormalizing formatting

At 2012-10-08 16:07 -0400, Charles O'Connor wrote:
I am trying to denormalize formatting tags to transform:

<p>Here is some <bold>funky bold text with <italic>some of it also 
italic and perhaps <underline>underlined</underline>as 
well.</italic></bold></p>

to:

<p>Here is some <bold>funky bold text with </bold><bold><italic>some 
of it also italic and perhaps 
</italic></bold><bold><italic><underline>underlined</underline></italic
</bold><bold><italic> 
well.</italic></bold></p>

How bizarre!  I've never seen such a requirement.

The developer I'm working with wants to use string manipulation in 
.NET, but I'm thinking that XSL would be a more elegant solution.

I totally agree ... dealing with nodes will be far better than 
dealing with strings.

Can anyone point me to a snippet of code that I could modify to get 
the desired effect?

I hope the example below helps ... it was an interesting 
challenge.  It produces your output precisely.

I imagine someone has at some time needed to do something similar.

I can't imagine such a transformation at all.  Can you shed any light 
on why the desired output is needed?

. . . . . . . . . Ken

t:\ftemp>type charles.xml
<p>Here is some <bold>funky bold text with <italic>some of it also 
italic and perhaps <underline>underlined</underline>as 
well.</italic></bold></p>
t:\ftemp>xslt charles.xml charles.xsl
<?xml version="1.0" encoding="utf-8"?><p>Here is some <bold>funky 
bold text with </bold><bold><italic>some of it also italic and 
perhaps 
</italic></bold><bold><italic><underline>underlined</underline></italic>
</bold><bold><italic>as 
well.</italic></bold></p>
t:\ftemp>type charles.xsl
<?xml version="1.0" encoding="US-ASCII"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
                 version="1.0">

<xsl:template match="p">
   <xsl:copy>
     <!--handle all descendent text nodes individually-->
     <xsl:for-each select=".//text()">
       <xsl:call-template name="nest-ancestors">
         <xsl:with-param name="ancestors"
                         select="ancestor::*[ancestor::p]"/>
       </xsl:call-template>
     </xsl:for-each>
   </xsl:copy>
</xsl:template>

<!--reconstitute all of the ancestors in order-->
<xsl:template name="nest-ancestors">
   <xsl:param name="ancestors"/>
   <xsl:choose>
     <xsl:when test="$ancestors">
       <!--reconstitute the furthest of the ancestors-->
       <xsl:element name="{name($ancestors[1])}"
                    namespace="{namespace-uri($ancestors[1])}">
         <!--handle the rest of the ancstors-->
         <xsl:call-template name="nest-ancestors">
           <xsl:with-param name="ancestors"
select="$ancestors[position()>1]"/>
         </xsl:call-template>
       </xsl:element>
     </xsl:when>
     <xsl:otherwise>
       <!--no more ancestors, so just copy the text node-->
       <xsl:copy/>
     </xsl:otherwise>
   </xsl:choose>
</xsl:template>

</xsl:stylesheet>

t:\ftemp>






--
Contact us for world-wide XML consulting and instructor-led training
Free 5-hour lecture: http://www.CraneSoftwrights.com/links/udemy.htm
Crane Softwrights Ltd.            http://www.CraneSoftwrights.com/s/
G. Ken Holman                   mailto:gkholman(_at_)CraneSoftwrights(_dot_)com
Google+ profile: https://plus.google.com/116832879756988317389/about
Legal business disclaimers:    http://www.CraneSoftwrights.com/legal


--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--


--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--


<Prev in Thread] Current Thread [Next in Thread>