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

Re: Is split problem a grouping problem?

Subject: Re: Is split problem a grouping problem?
From: "Terry Badger terry_badger@xxxxxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx>
Date: Fri, 2 Feb 2018 02:12:55 -0000
Re:  Is split problem a grouping problem?
Rick, From the rules this does not look like a grouping problem but rather
each section drives a file and get what it needs. Think this is close.
Fro
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema" exclude-result-prefixes="xs"
version="2.0">
B B B B <xsl:template match="book">
B B B B B B B B <wrapper>
B B B B B B B B B B B B <xsl:apply-templates select="chapter/section"/>
B B B B B B B B </wrapper>
B B B B </xsl:template>
B B B B <!-- each section drives out a file and picks up what it needs to have
-->
B B B B <xsl:template match="section">
B B B B B B B B <xsl:choose>
B B B B B B B B B B B B <!-- has intro -->
B B B B B B B B B B B B <xsl:when test=".[intro]">
B B B B B B B B B B B B B B B B <xsl:element name="file">
B B B B B B B B B B B B B B B B B B B B <xsl:copy-of
select="parent::chapter/title"/>
B B B B B B B B B B B B B B B B B B B B <xsl:if test="parent::section and
position() = 1">
B B B B B B B B B B B B B B B B B B B B B B B B <xsl:copy-of
select="parent::section/title"/>
B B B B B B B B B B B B B B B B B B B B </xsl:if>
B B B B B B B B B B B B B B B B B B B B <xsl:copy>
B B B B B B B B B B B B B B B B B B B B B B B B <xsl:copy-of select="title,
intro"/>
B B B B B B B B B B B B B B B B B B B B </xsl:copy>
B B B B B B B B B B B B B B B B </xsl:element>
B B B B B B B B B B B B </xsl:when>
B B B B B B B B B B B B <!-- no children sections -->
B B B B B B B B B B B B <xsl:when test=".[not(section)]">
B B B B B B B B B B B B B B B B <xsl:element name="file">
B B B B B B B B B B B B B B B B B B B B <xsl:if test="parent::section and
position() = 1">
B B B B B B B B B B B B B B B B B B B B B B B B <xsl:copy-of
select="parent::section/title"/>
B B B B B B B B B B B B B B B B B B B B </xsl:if>
B B B B B B B B B B B B B B B B B B B B <xsl:if test="position() = 1">
B B B B B B B B B B B B B B B B B B B B B B B B <xsl:copy-of
select="parent::chapter/title"/>
B B B B B B B B B B B B B B B B B B B B </xsl:if>
B B B B B B B B B B B B B B B B B B B B <xsl:copy-of select="."/>
B B B B B B B B B B B B B B B B </xsl:element>
B B B B B B B B B B B B </xsl:when>
B B B B B B B B B B B B <!-- recurse to get all levels -->
B B B B B B B B B B B B <xsl:otherwise>
B B B B B B B B B B B B B B B B <xsl:apply-templates select="section"/>
B B B B B B B B B B B B </xsl:otherwise>
B B B B B B B B </xsl:choose>
B B B B </xsl:template>
B B B B <!-- turn off title to output only when wanted -->
B B B B <xsl:template match="title"/>
</xsl:stylesheet>

RFFFFFjoosfofopqcds'jnfs'output
<?xml version="1.0" encoding="UTF-8"?>
<wrapper>
B B B B <file>
B B B B B B B B <title>Chapter 1</title>
B B B B B B B B <section>
B B B B B B B B B B B B <title>Section 1.1</title>
B B B B B B B B </section>
B B B B </file>
B B B B <file>
B B B B B B B B <section>
B B B B B B B B B B B B <title>Section 1.2</title>
B B B B B B B B </section>
B B B B </file>
B B B B <file>
B B B B B B B B <title>Section 1.3</title>
B B B B B B B B <section>
B B B B B B B B B B B B <title>Section 1.3.1</title>
B B B B B B B B </section>
B B B B </file>
B B B B <file>
B B B B B B B B <section>
B B B B B B B B B B B B <title>Section 1.3.2</title>
B B B B B B B B </section>
B B B B </file>
B B B B <file>
B B B B B B B B <section>
B B B B B B B B B B B B <title>Section 1.3.3</title>
B B B B B B B B </section>
B B B B </file>
B B B B <file>
B B B B B B B B <section>
B B B B B B B B B B B B <title>Section 1.3.4</title>
B B B B B B B B B B B B <intro/>
B B B B B B B B </section>
B B B B </file>
B B B B <file>
B B B B B B B B <title>Section 2.1</title>
B B B B B B B B <section>
B B B B B B B B B B B B <title>Section 2.1.1</title>
B B B B B B B B </section>
B B B B </file>
B B B B <file>
B B B B B B B B <section>
B B B B B B B B B B B B <title>Section 2.1.2</title>
B B B B B B B B B B B B <intro/>
B B B B B B B B </section>
B B B B </file>
B B B B <file>
B B B B B B B B <section>
B B B B B B B B B B B B <title>Section 2.2</title>
B B B B B B B B </section>
B B B B </file>
</wrapper>
<?xml version="1.0" encoding="UTF-8"?>
<wrapper>
B B B B <file>
B B B B B B B B <title>Chapter 1</title>
B B B B B B B B <section>
B B B B B B B B B B B B <title>Section 1.1</title>
B B B B B B B B </section>
B B B B </file>
B B B B <file>
B B B B B B B B <section>
B B B B B B B B B B B B <title>Section 1.2</title>
B B B B B B B B </section>
B B B B </file>
B B B B <file>
B B B B B B B B <title>Section 1.3</title>
B B B B B B B B <section>
B B B B B B B B B B B B <title>Section 1.3.1</title>
B B B B B B B B </section>
B B B B </file>
B B B B <file>
B B B B B B B B <section>
B B B B B B B B B B B B <title>Section 1.3.2</title>
B B B B B B B B </section>
B B B B </file>
B B B B <file>
B B B B B B B B <section>
B B B B B B B B B B B B <title>Section 1.3.3</title>
B B B B B B B B </section>
B B B B </file>
B B B B <file>
B B B B B B B B <section>
B B B B B B B B B B B B <title>Section 1.3.4</title>
B B B B B B B B B B B B <intro/>
B B B B B B B B </section>
B B B B </file>
B B B B <file>
B B B B B B B B <title>Section 2.1</title>
B B B B B B B B <section>
B B B B B B B B B B B B <title>Section 2.1.1</title>
B B B B B B B B </section>
B B B B </file>
B B B B <file>
B B B B B B B B <section>
B B B B B B B B B B B B <title>Section 2.1.2</title>
B B B B B B B B B B B B <intro/>
B B B B B B B B </section>
B B B B </file>
B B B B <file>
B B B B B B B B <section>
B B B B B B B B B B B B <title>Section 2.2</title>
B B B B B B B B </section>
B B B B </file>
</wrapper>


Terry






On bThursdayb, bFebruaryb b01b, b2018b
b03b:b05b:b49b bPM, Rick Quatro rick@xxxxxxxxxxxxxx
<xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> wrote:





Hi, I am trying to solve a problem using XSLT 2. Here is my input:

<?xml version="1.0" encoding="UTF-8"?>
<book>
B  B  <chapter>
B  B  B  B  <title>Chapter 1</title>
B  B  B  B  <section>
B  B  B  B  B  B  <title>Section 1.1</title>
B  B  B  B  </section>
B  B  B  B  <section>
B  B  B  B  B  B  <title>Section 1.2</title>
B  B  B  B  </section>
B  B  B  B  <section>
B  B  B  B  B  B  <title>Section 1.3</title>
B  B  B  B  B  B  <section>
B  B  B  B  B  B  B  B  <title>Section 1.3.1</title>
B  B  B  B  B  B  </section>
B  B  B  B  B  B  <section>
B  B  B  B  B  B  B  B  <title>Section 1.3.2</title>
B  B  B  B  B  B  </section>
B  B  B  B  B  B  <section>
B  B  B  B  B  B  B  B  <title>Section 1.3.3</title>
B  B  B  B  B  B  </section>
B  B  B  B  B  B  <section>
B  B  B  B  B  B  B  B  <title>Section 1.3.4</title>
B  B  B  B  B  B  B  B  <intro/>
B  B  B  B  B  B  B  B  <section>
B  B  B  B  B  B  B  B  B  B  <title>Section 1.3.4.1</title>
B  B  B  B  B  B  B  B  </section>
B  B  B  B  B  B  B  B  <section>
B  B  B  B  B  B  B  B  B  B  <title>Section 1.3.4.2</title>
B  B  B  B  B  B  B  B  </section>
B  B  B  B  B  B  B  B  <section>
B  B  B  B  B  B  B  B  B  B  <title>Section 1.3.4.3</title>
B  B  B  B  B  B  B  B  </section>
B  B  B  B  B  B  </section>
B  B  B  B  </section>
B  B  </chapter>
B  B  <chapter>
B  B  B  B  <title>Chapter 2</title>
B  B  B  B  <section>
B  B  B  B  B  B  <title>Section 2.1</title>
B  B  B  B  B  B  <section>
B  B  B  B  B  B  B  B  <title>Section 2.1.1</title>
B  B  B  B  B  B  </section>
B  B  B  B  B  B  <section>
B  B  B  B  B  B  B  B  <title>Section 2.1.2</title>
B  B  B  B  B  B  B  B  <intro/>
B  B  B  B  B  B  B  B  <section>
B  B  B  B  B  B  B  B  B  B  <title>Section 2.1.2.1</title>
B  B  B  B  B  B  B  B  </section>
B  B  B  B  B  B  B  B  <section>
B  B  B  B  B  B  B  B  B  B  <title>Section 2.1.2.2</title>
B  B  B  B  B  B  B  B  </section>
B  B  B  B  B  B  B  B  <section>
B  B  B  B  B  B  B  B  B  B  <title>Section 2.1.2.3</title>
B  B  B  B  B  B  B  B  </section>
B  B  B  B  B  B  </section>
B  B  B  B  </section>
B  B  B  B  <section>
B  B  B  B  B  B  <title>Section 2.2</title>
B  B  B  B  </section>
B  B  </chapter>
</book>

I want to split this content up into separate files (eventually HTML). Here
is the desired output:

<?xml version="1.0" encoding="UTF-8"?>
<book>
B  B  <file>
B  B  B  B  <title>Chapter 1</title>
B  B  B  B  <section>
B  B  B  B  B  B  <title>Section 1.1</title>
B  B  B  B  </section>
B  B  </file>
B  B  <file>
B  B  B  B  <title>Section 1.2</title>
B  B  </file>
B  B  <file>
B  B  B  B  <title>Section 1.3</title>
B  B  B  B  <section>
B  B  B  B  B  B  <title>Section 1.3.1</title>
B  B  B  B  </section>
B  B  </file>
B  B  <file>
B  B  B  B  <title>Section 1.3.2</title>
B  B  </file>
B  B  <file>
B  B  B  B  <title>Section 1.3.3</title>
B  B  </file>
B  B  <file>
B  B  B  B  <!-- Doesn't have to be with the following child section because
it
has <intro/> content. -->
B  B  B  B  <title>Section 1.3.4</title>
B  B  B  B  <intro/>
B  B  </file>
B  B  <file>
B  B  B  B  <title>Section 1.3.4.1</title>
B  B  </file>
B  B  <file>
B  B  B  B  <title>Section 1.3.4.2</title>
B  B  </file>
B  B  <file>
B  B  B  B  <title>Section 1.3.4.3</title>
B  B  </file>
B  B  <file>
B  B  B  B  <!-- All have to stay together because there is no content
between
the <title/> and child <section/> -->
B  B  B  B  <title>Chapter 2</title>
B  B  B  B  <section>
B  B  B  B  B  B  <title>Section 2.1</title>
B  B  B  B  B  B  <section>
B  B  B  B  B  B  B  B  <title>Section 2.1.1</title>
B  B  B  B  B  B  </section>
B  B  B  B  </section>
B  B  </file>
B  B  <file>
B  B  B  B  <title>Section 2.1.2</title>
B  B  B  B  <intro/>
B  B  </file>
B  B  <file>
B  B  B  B  <title>Section 2.1.2.1</title>
B  B  </file>
B  B  <file>
B  B  B  B  <title>Section 2.1.2.2</title>
B  B  </file>
B  B  <file>
B  B  B  B  <title>Section 2.1.2.3</title>
B  B  </file>
B  B  <file>
B  B  B  B  <title>Section 2.2</title>
B  B  </file>
</book>

The rules are as follows: A <section> can be in its own file if

1) There are no child <section> elements (like Section 1.2).
2) There is element content after the <title> and before the first child
<section> element; for example an <intro> element (like Section 1.3.4).

Otherwise, the <section> has to contain any first child descendants (like
Chapter 2 through Section 2.1.1).

This looks to me like a grouping problem where I can use
<xsl:for-each-group>. I have this as a shell but I want to make sure I am on
the right track. Thank you very much.

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
B  B  xmlns:xs="http://www.w3.org/2001/XMLSchema"
B  B  exclude-result-prefixes="xs"
B  B  version="2.0">
B  B 
B  B  <xsl:template match="/">
B  B  B  B  <xsl:for-each-group group-starting-with="//chapter|//section"
select=".">
B  B  B  B  B  B  <file>
B  B  B  B  B  B  B  B  <xsl:copy-of select="current-group()"/>
B  B  B  B  B  B  </file>
B  B  B  B  </xsl:for-each-group>
B  B  </xsl:template>
</xsl:stylesheet>

Rick

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.