Start all over again then.
On a Friday. :-(
As it is time to leave on Friday I haven't checked this but......
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:saxon="http://saxon.sf.net/"
exclude-result-prefixes="xs saxon">
<xsl:output indent="yes"/>
<xsl:template match="/">
<bk>
<xsl:variable name="blocks">
<xsl:for-each-group select="/book/*"
group-starting-with="*[self::title]">
<block>
<xsl:copy-of
select="current-group()"/>
</block>
</xsl:for-each-group>
</xsl:variable>
<xsl:variable name="nested">
<xsl:call-template name="nest">
<xsl:with-param name="nodes"
select="$blocks//block"/>
</xsl:call-template>
</xsl:variable>
<xsl:apply-templates select="$nested/*"/>
</bk>
</xsl:template>
<xsl:template name="nest">
<xsl:param name="nodes" select="/.."/>
<xsl:param name="level" select="1" as="xs:integer"/>
<xsl:for-each-group select="$nodes"
group-starting-with="*[title/@role = $level]">
<group depth="{$level}">
<xsl:copy-of select="current-group()[1]"/>
<xsl:call-template name="nest">
<xsl:with-param name="nodes"
select="current-group()[position() > 1]"/>
<xsl:with-param name="level" select="$level +
1"/>
</xsl:call-template>
</group>
</xsl:for-each-group>
</xsl:template>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="group">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="title">
<xsl:copy>
<xsl:copy-of select="@*"/>
<xsl:attribute name="sect">
<xsl:number count="group" level="multiple"/>
</xsl:attribute>
<xsl:apply-templates/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
generates this output:
<?xml version="1.0" encoding="UTF-8"?>
<bk>
<block>
<title role="1" sect="1">L1</title>
</block>
<block>
<title role="2" sect="1.1">L1.1</title>
<para>This document defines an XML schema for ....</para>
</block>
<block>
<title role="2" sect="1.2">L1.2</title>
<para>The normative XML Schema for the OpenDoc ....</para>
</block>
<block>
<title role="1" sect="2">L2</title>
<para>This chapter introduces the structure of ....</para>
<para>In the OpenDocument format, each structu ....</para>
</block>
<block>
<title role="2" sect="2.1">L2.1</title>
<para>A document root element is the primary e ....</para>
</block>
<block>
<title role="3" sect="2.1.1">L2.1.1</title>
<para>The content models of the five root elem ....</para>
</block>
<block>
<title role="4" sect="2.1.1.1">L4 test</title>
<para>The content models of the five root elem ....</para>
<para>The <office:document> root contains a co ....</para>
</block>
<block>
<title role="4" sect="2.1.1.2">L4 test 2.1.1.2</title>
<para>The content models of the five root elem ....</para>
<para>The <office:document> root contains a co ....</para>
</block>
<block>
<title role="2" sect="2.2">L2.1</title>
<para>A document root element is the primary e ....</para>
</block>
</bk>
from this input:
<book >
<title role="1">L1</title>
<title role="2">L1.1</title>
<para>This document defines an XML schema for ....</para>
<title role="2">L1.2</title>
<para>The normative XML Schema for the OpenDoc ....</para>
<title role="1">L2</title>
<para>This chapter introduces the structure of ....</para>
<para>In the OpenDocument format, each structu ....</para>
<title role="2">L2.1</title>
<para>A document root element is the primary e ....</para>
<title role="3">L2.1.1</title>
<para>The content models of the five root elem ....</para>
<title role="4">L4 test</title>
<para>The content models of the five root elem ....</para>
<para>The <office:document> root contains a co ....</para>
<title role="4">L4 test 2.1.1.2</title>
<para>The content models of the five root elem ....</para>
<para>The <office:document> root contains a co ....</para>
<title role="2">L2.1</title>
<para>A document root element is the primary e ....</para>
</book>
cheeeeers
--
Andrew Welch
http://andrewjwelch.com
Kernow: http://kernowforsaxon.sf.net/
--~------------------------------------------------------------------
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>
--~--