[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message]

Positional grouping problem

Subject: Positional grouping problem
From: Mark Peters <markpeters.work@xxxxxxxxx>
Date: Fri, 1 Feb 2013 13:40:52 -0500
 Positional grouping problem
Hi,

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.

Each grouping will have the following structure:

<div class="NavFrame"> [replaces <div style="font-size: 14pt;">]
        <div class="NavHead">Title</div> [replaces <span>Title</span>]
        <div class="NavContent">
                .. [following siblings of <div style="font-size: 14pt;">]
        </div>
</div>

Input:

<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>


Desired output:

<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 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>


Here's my draft stylesheet.

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:html="http://www.w3.org/1999/xhtml" version="2.0">
    <xsl:output indent="yes" include-content-type="no"
omit-xml-declaration="yes"/>
    <!-- This stylesheet ... -->
    <!-- Copy all elements and attributes from the source document -->
    <xsl:output indent="yes"/>

    <!-- Insert collabsible CSS classes into the .wiki topic files -->
    <xsl:template match="html:div[1]">
        <xsl:copy>
            <xsl:copy-of select="@*"/>
            <xsl:for-each-group select="*" group-starting-with="html:div[
contains(@style,'14pt')]">
                <div class="NavFrame">
                    <div class="NavHead">
                        <xsl:value-of select="span"/>
                    </div>
                    <div class="NavContent">
                        <xsl:apply-templates select="current-group()"/>
                    </div>
                </div>
            </xsl:for-each-group>
        </xsl:copy>
    </xsl:template>
</xsl:stylesheet>

And the current output:

<div xmlns="http://www.w3.org/1999/xhtml" style="margin-bottom: 15pt;
margin-left: 20pt;">
    <div xmlns="" xmlns:html="http://www.w3.org/1999/xhtml" class="NavFrame">
        <div class="NavHead"/>
        <div class="NavContent">
            <div xmlns="http://www.w3.org/1999/xhtml" style="blah"/>
        Text

        Page Title
    </div>
    </div>
    <div xmlns="" xmlns:html="http://www.w3.org/1999/xhtml" class="NavFrame">
        <div class="NavHead"/>
        <div class="NavContent">
        Title

        Text



        Text
    </div>
    </div>
    <div xmlns="" xmlns:html="http://www.w3.org/1999/xhtml" class="NavFrame">
        <div class="NavHead"/>
        <div class="NavContent">
        Title

        Text

        Text


    </div>
    </div>
</div>

The stylesheet currently inserts the <div class="NavFrame"/> node at
the beginning of the output file and also groups nodes where the
starting <div/> node/@style attribute doesn't contain "14pt" -- for
example, <div style="font-size: 17pt;">. Also, the output child nodes
contain text only.

Any help would be appreciated.

Thanks!

Mark

--
Senior technical writer
Saba Software, Inc.

Current Thread

PURCHASE STYLUS STUDIO ONLINE TODAY!

Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!

Buy Stylus Studio Now

Download The World's Best XML IDE!

Accelerate XML development with our award-winning XML IDE - Download a free trial today!

Don't miss another message! Subscribe to this list today.
Email
First Name
Last Name
Company
Subscribe in XML format
RSS 2.0
Atom 0.3
Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member
Stylus Studio® and DataDirect XQuery ™are products from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2013 All Rights Reserved.