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

Re: For-each-group problem

Subject: Re: For-each-group problem
From: "andrew welch" <andrew.j.welch@xxxxxxxxx>
Date: Mon, 2 Oct 2006 16:40:07 +0100
li div
On 10/2/06, Mario Madunic <hajduk@xxxxxxxx> wrote:
Can't seem to get the results I want using for-each-group

Using Saxon 8 and XSLT 2

Sample doc

<root>
  <body>
    <heading>
    <p></p>
    <p></p>

    <li></li>
    <div>
      <p></p>
      <p></p>
    </div>

    <li></li>
    <div>
      <p></p>
      <p></p>
      <p></p>
      <p></p>
    </div>

    <li></li>
    <div>
      <p></p>
      <p></p>
    </div>

    <p></p>
    <p></p>
    <footer></footer>
  <body>
</root>

I want it to look like the following

<root>
  <body>
    <heading>
    <p></p>
    <p></p>

    <li>
      <div>
        <p></p>
        <p></p>
      </div>
    </li>

    <li>
      <div>
        <p></p>
        <p></p>
        <p></p>
        <p></p>
      </div>
    </li>

    <li>
      <div>
        <p></p>
        <p></p>
      </div>
    </li>

    <p></p>
    <p></p>
    <footer></footer>
  <body>
</root>

I've followed the example in MK's XSLT 2 book page # 297 and haven't achieved
the same results. I have a bunch of elements that this must be done to.

Firstly your samples aren't well-formed XML, which doesn't help. However...


you don't need grouping here, just a variation of the identity transform:

<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="@*|node()">
	<xsl:copy>
		<xsl:apply-templates select="@*|node()"/>
	</xsl:copy>
</xsl:template>

<xsl:template match="heading">
	<xsl:copy>
		<xsl:apply-templates select="*[not(self::div)]"/>
	</xsl:copy>
</xsl:template>

<xsl:template match="li">
	<xsl:copy>
		<xsl:apply-templates select="following-sibling::*[1][self::div]"/>
	</xsl:copy>
</xsl:template>
</xsl:stylesheet>

produces:

<root>
	<body>
		<heading>
			<p/>
			<p/>
			<li>
				<div>
					<p/>
					<p/>
				</div>
			</li>
			<li>
				<div>
					<p/>
					<p/>
					<p/>
					<p/>
				</div>
			</li>
			<li>
				<div>
					<p/>
					<p/>
				</div>
			</li>
			<p/>
			<p/>
		</heading>
		<footer/>
	</body>
</root>

cheers
andrew

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.