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

Grouping with keys

Subject: Grouping with keys
From: "Rick Quatro" <rick@xxxxxxxxxxxxxx>
Date: Thu, 24 Oct 2013 11:34:05 -0400
 Grouping with keys
Hi,

I am trying to group with a key using XSLT 1.0. Here is my input:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE html PUBLIC
"-//W3C//DTD XHTML 1.0 Transitional//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
 <head>
  <link rel="stylesheet" href="local.css" type="text/css" />
  <title>Creating a Group</title>
  <meta http-equiv="Content-type" content="text/html; charset=UTF-8" />
 </head>
 <body>
  <p class="listintro">To create a group of applications to manage the group
using a common policy:</p>
  <p class="listitem1">1. Open the Desktop to the Application Manager.</p>
  <p class="listitem2">2. From the service menu, select New Group...</p>
  <p class="figure">&#0160;</p>
  <p class="caption"><b>Creating a Group</b></p>
  <p class="listitem2">3. The Group properties window opens.</p>
  <p class="figure">&#0160;</p>
  <p class="caption"><b>Creating a Group</b></p>
  <p class="listitem2">4. Enter a name in Group Name.</p>
  <p class="listitem2">5. Select an application by clicking Add All.</p>
  <p class="listitem2">6. When you are finished, click Save.</p>
 </body>
</html>

I want to group items like this:


<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE html PUBLIC
"-//W3C//DTD XHTML 1.0 Transitional//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
 <head>
  <link rel="stylesheet" href="local.css" type="text/css" />
  <title>Creating a Group</title>
  <meta http-equiv="Content-type" content="text/html; charset=UTF-8" />
 </head>
 <body>
  <p class="listintro">To create a group of applications to manage the group
using a common policy:</p>
  <ol start="1">
    <li>1. Open the Desktop to the Application Manager.</li>
    <li>2. From the service menu, select New Group...</li>
  </ol>
  <p class="figure">&#0160;</p>
  <p class="caption"><b>Creating a Group</b></p>
  <ol start="3">
    <li>3. The Group properties window opens.</li>
  </ol>
  <p class="figure">&#0160;</p>
  <p class="caption"><b>Creating a Group</b></p>
  <ol start="4">
    <li>4. Enter a name in Group Name.</p>
    <li>5. Select an application by clicking Add All.</li>
    <li>6. When you are finished, click Save.</li>
  </ol>
 </body>
</html>

Here is my stylesheet:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:xhtml="http://www.w3.org/1999/xhtml"
    xmlns="http://www.w3.org/1999/xhtml"
    exclude-result-prefixes="xhtml xsl"
    version="1.0">

    <xsl:key name="orderedlist" match="xhtml:p[@class='listitem1' or
@class='listitem2'][preceding-sibling::*[1][self::xhtml:p[@class='listitem1'
or @class='listitem2']]]"
        use="generate-id(preceding-sibling::xhtml:p[@class='listitem1' or
@class='listitem2'][not(preceding-sibling::*[1][self::xhtml:p[@class='listit
em1' or @class='listitem2']])])" />

    <!-- IdentityTransform -->
    <xsl:template match="/ | @* | node()" name="identity">
        <xsl:copy><xsl:apply-templates select="@* | node()" /></xsl:copy>
    </xsl:template>

    <xsl:template match="xhtml:p[@class='listitem1' or
@class='listitem2'][not(preceding-sibling::*[1][self::xhtml:p[@class='listit
em1' or @class='listitem2']])]">
        <ol start="{substring-before(node(),'.')}">
            <li><xsl:copy-of select="node()"/></li>
            <xsl:apply-templates mode="copy" select="key('orderedlist',
generate-id())"/>
        </ol>
    </xsl:template>

    <xsl:template match="xhtml:p[@class='listitem1' or
@class='listitem2'][preceding-sibling::*[1][self::xhtml:p[@class='listitem1'
or @class='listitem2']]]"/>

    <xsl:template match="xhtml:p[@class='listitem1' or @class='listitem2']"
mode="copy">
        <li><xsl:copy-of select="node()"/></li>
    </xsl:template>

</xsl:stylesheet>

The wrinkle here is that in the original XML, the first list item has an
attribute of "listitem1" while all the rest have "listitem2". I am missing
something vital in my understanding, because I am getting this:

<?xml version="1.0" encoding="UTF-8"?><html
xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
 <head>
  <link rel="stylesheet" href="local.css" type="text/css"/>
  <title>Creating a Group</title>
  <meta http-equiv="Content-type" content="text/html; charset=UTF-8"/>
 </head>
 <body>
  <p class="listintro">To create a group of applications to manage the group
using a common policy:</p>
  <ol start="1"><li>1. Open the Desktop to the Application
Manager.</li><li>2. From the service menu, select New Group...</li><li>5.
Select an application by clicking Add All.</li><li>6. When you are finished,
click Save.</li></ol>

  <p class="figure"> </p>
  <p class="caption"><b>Creating a Group</b></p>
  <ol start="3"><li>3. The Group properties window opens.</li></ol>
  <p class="figure"> </p>
  <p class="caption"><b>Creating a Group</b></p>
  <ol start="4"><li>4. Enter a name in Group Name.</li></ol>


 </body>
</html>

Thanks in advance for any help you can provide. I really want to understand
this.

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.