[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message] Re: Denormalizing formatting
At 2012-10-08 16:07 -0400, Charles O'Connor wrote:
I am trying to denormalize formatting tags to transform: 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>
|
PURCHASE STYLUS STUDIO ONLINE TODAY!Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced! Download The World's Best XML IDE!Accelerate XML development with our award-winning XML IDE - Download a free trial today! Subscribe in XML format
|