Subject: Re: [xsl] Positional grouping problem From: Mark Peters <markpeters.work@xxxxxxxxx> Date: Fri, 1 Feb 2013 14:13:51 -0500 |
Hi Ken, Perfect! Ah yes, I see where you added the <xsl:choose/> condition.That makes sense. It's funny what you can sometimes only see in hindsight. Thanks so much! Mark On Fri, Feb 1, 2013 at 1:57 PM, G. Ken Holman <gkholman@xxxxxxxxxxxxxxxxxxxx> wrote: > At 2013-02-01 13:40 -0500, Mark Peters wrote: >> >> I've trying to group certain nodes in a flat MediaWiki ML file to >> allow readers to show and hide the content. The grouping is based on >> font sizes declared in a @style attribute, which have a uniform >> structure across all content files. >> >> Essentially, I'm trying to group each <div/> node where the @style >> contains "14pt" with its following siblings. Some of the siblings have >> other font sizes smaller than 14pt; others have no declared font sizes >> because they wrap other nodes, such as tables. > > > You were really close. > > What you weren't checking is that when the group does not match the grouping > criteria for group-starting-with, then you are in the content before the > first group. > > I hope the solution below helps ... if I haven't missed seeing anything then > the output matches what you said you wanted. > > . . . . . . . . Ken > > > T:\ftemp>type mark.xml > <?xml version="1.0" encoding="UTF-8"?> > > <div style="margin-bottom: 15pt; margin-left: 20pt;" > xmlns="http://www.w3.org/1999/xhtml"> > <div style="blah" /> > <div style="font-family: sans-serif; font-size: 10pt;"> > <span>Text</span> > </div> > <div style="font-size: 17pt;"> > <span>Page Title</span> > </div> > <hr /> > <div style="font-size: 14pt;"> > <span>Title</span> > </div> > <div style="font-family: sans-serif; font-size: 10pt;"> > <span>Text</span> > </div> > <div style="margin-left: 5pt;"> > <table /> > </div> > <div style="font-family: sans-serif; font-size: 10pt;"> > <span>Text</span> > </div> > <div style="font-size: 14pt;"> > <span>Title</span> > </div> > <div style="font-family: sans-serif; font-size: 10pt;"> > <span>Text</span> > </div> > <div style="font-family: sans-serif; font-size: 10pt;"> > <span>Text</span> > </div> > <div style="margin-left: 5pt;"> > <table /> > </div> > </div> > > T:\ftemp>call xslt2 mark.xml mark.xsl > > <div xmlns="http://www.w3.org/1999/xhtml" > style="margin-bottom: 15pt; margin-left: 20pt;"> > <div style="blah"/> > <div style="font-family: sans-serif; font-size: 10pt;"> > <span>Text</span> > </div> > <div style="font-size: 17pt;"> > <span>Page Title</span> > </div> > <hr/> > <div class="NavFrame"> > <div class="NavHead">Title</div> > <div class="NavContent"> > <div style="font-family: sans-serif; font-size: 10pt;"> > <span>Text</span> > </div> > <div style="margin-left: 5pt;"> > <table/> > </div> > <div style="font-family: sans-serif; font-size: 10pt;"> > <span>Text</span> > </div> > </div> > </div> > <div class="NavFrame"> > <div class="NavHead">Title</div> > <div class="NavContent"> > <div style="font-family: sans-serif; font-size: 10pt;"> > <span>Text</span> > </div> > <div style="font-family: sans-serif; font-size: 10pt;"> > <span>Text</span> > </div> > <div style="margin-left: 5pt;"> > <table/> > </div> > </div> > </div> > </div> > > T:\ftemp>type mark.xsl > <?xml version="1.0" encoding="UTF-8"?> > > <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" > xmlns:html="http://www.w3.org/1999/xhtml" > xmlns="http://www.w3.org/1999/xhtml" > exclude-result-prefixes="html" > version="2.0"> > > <xsl:output indent="yes" omit-xml-declaration="yes"/> > > > <xsl:template match="html:div"> > <xsl:copy> > <xsl:copy-of select="@*"/> > <xsl:for-each-group select="*" > group-starting-with="html:div[contains(@style,'14pt')]"> > <xsl:choose> > <xsl:when test="self::html:div[contains(@style,'14pt')]"> > <!--found a group--> > > <div class="NavFrame"> > <div class="NavHead"> > <xsl:copy-of select="html:span/node()"/> > </div> > <div class="NavContent"> > <xsl:copy-of select="current-group()[position()>1]"/> > </div> > </div> > </xsl:when> > <xsl:otherwise> > <!--this is the pre-amble before the first group--> > <xsl:copy-of select="current-group()"/> > </xsl:otherwise> > </xsl:choose> > > </xsl:for-each-group> > </xsl:copy> > </xsl:template> > > </xsl:stylesheet> > T:\ftemp>rem Done! > > > -- > 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@xxxxxxxxxxxxxxxxxxxx > Google+ profile: https://plus.google.com/116832879756988317389/about > Legal business disclaimers: http://www.CraneSoftwrights.com/legal > -- Senior technical writer Saba Software, Inc.
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] Positional grouping probl, G. Ken Holman | Thread | RE: [xsl] RE: Saxon via Ant - Getti, Kerry, Richard |
Re: [xsl] Positional grouping probl, G. Ken Holman | Date | RE: [xsl] RE: Saxon via Ant - Getti, Kerry, Richard |
Month |