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

Re: mixed content grouping by whitespace

Subject: Re: mixed content grouping by whitespace
From: "G. Ken Holman" <gkholman@xxxxxxxxxxxxxxxxxxxx>
Date: Sun, 11 Apr 2010 20:19:54 -0400
Re:  mixed content grouping by whitespace
At 2010-04-11 21:17 +0200, Imsieke, Gerrit, le-tex wrote:
On 11.04.2010 19:43, David Carlisle wrote:
> On 11/04/2010 17:37, James Cummings wrote:
> group-starting-with="text()">
> probably that wants to be text()[not(normalize-space(.))]
> David

Couldn't get the desired result like that.
I applied a two-step process:
1. Mark up whitespace using intermediate <seg @type="sep"> </seg>;
2. group adjacent WS (and non-WS) nodes, put the non-WS groups in a newly created w element.

When I completed my solution I found it almost identical to yours, except that I used group-starting-with=. I also could not think of a way to do it in one pass.

. . . . . . . . . . Ken

T:\ftemp>type cummings.xml
<ab xmlns="http://www.tei-c.org/ns/1.0">
   <seg>foo blort wibble</seg><lb/>
   <seg>foo-<m>blort</m> wibble</seg><lb/>
   <seg><w>foo</w>-<m>blort</m> wibble</seg><lb/>

T:\ftemp>xslt2 cummings.xml cummings.xsl
<?xml version="1.0" encoding="UTF-8"?><ab xmlns="http://www.tei-c.org/ns/1.0">
   <seg><w>foo</w> <w>blort</w> <w>wibble</w></seg><lb/>
   <seg><w>foo-<m>blort</m></w> <w>wibble</w></seg><lb/>
   <seg><w><w>foo</w>-<m>blort</m></w> <w>wibble</w></seg><lb/>
T:\ftemp>type cummings.xsl
<?xml version="1.0" encoding="US-ASCII"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                exclude-result-prefixes="t my"

<xsl:template match="t:seg">
    <xsl:copy-of select="@*"/>
    <!--break up the text nodes in order to be grouped-->
    <xsl:variable name="content" as="node()*">
      <xsl:apply-templates mode="translate"/>
    <!--now group the content-->
    <xsl:for-each-group select="$content"
      <xsl:copy-of select="self::my:text/node()"/>
        <xsl:copy-of select="current-group()[not(self::my:text)]"/>

<xsl:template match="text()" mode="translate" priority="1">
  <xsl:analyze-string select="." regex="\s+">
      <!--encapsulate the white-space so it can be detected and recreated-->
      <my:text><xsl:value-of select="."/></my:text>
      <xsl:value-of select="."/>

<!--identity template; relies on built-in template rules for text-->
<xsl:template match="@*|node()" mode="#default translate">
    <xsl:apply-templates select="@*|node()"/>



XSLT/XQuery training:         San Carlos, California 2010-04-26/30
Principles of XSLT for XQuery Writers: San Francisco,CA 2010-05-03
XSLT/XQuery training:                 Ottawa, Canada 2010-05-10/14
XSLT/XQuery/UBL/Code List training: Trondheim,Norway 2010-06-02/11
Vote for your XML training:   http://www.CraneSoftwrights.com/s/i/
Crane Softwrights Ltd.          http://www.CraneSoftwrights.com/s/
G. Ken Holman                 mailto:gkholman@xxxxxxxxxxxxxxxxxxxx
Male Cancer Awareness Nov'07  http://www.CraneSoftwrights.com/s/bc
Legal business disclaimers:  http://www.CraneSoftwrights.com/legal

Current Thread


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.
First Name
Last Name
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.