select distinct values : select « XSLT stylesheet « XML

XML
1. CSS Style
2. SVG
3. XML Schema
4. XQuery
5. XSLT stylesheet
Java
XML Tutorial
Java Tutorial
Java Source Code / Java Documentation
Java Open Source
Jar File Download
Java Articles
Java Products
Java by API
C# / C Sharp
C# / CSharp Tutorial
ASP.Net
ASP.NET Tutorial
JavaScript DHTML
JavaScript Tutorial
JavaScript Reference
HTML / CSS
HTML CSS Reference
C / ANSI-C
C Tutorial
C++
C++ Tutorial
Ruby
PHP
Python
SQL Server / T-SQL
SQL Server / T-SQL Tutorial
Oracle PL / SQL
Oracle PL/SQL Tutorial
PostgreSQL
SQL / MySQL
MySQL Tutorial
VB.Net
VB.Net Tutorial
Flash / Flex / ActionScript
VBA / Excel / Access / Word
Microsoft Office PowerPoint 2007 Tutorial
Microsoft Office Excel 2007 Tutorial
Microsoft Office Word 2007 Tutorial
XML » XSLT stylesheet » select 
select distinct values


File: Data.xml

<?xml version="1.0" encoding="iso-8859-1"?>
<booklist>
   <book>
      <title>title 1</title>
      <author>author 1</author>
      <publisher>publisher 1</publisher>
      <isbn>1-11-11111-1</isbn>
      <price>6.99</price>
      <sales>235</sales>
   </book>
   <book>
      <title>title 2</title>
      <author>author 2</author>
      <publisher>publisher 2</publisher>
      <isbn>0 14 018967 X</isbn>
      <price>12.99</price>
      <sales>12</sales>
   </book>
</booklist>


File: Transform.xslt

<?xml version="1.0"?>
<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">

  <xsl:key name="pub" match="book" use="publisher" />

  <xsl:variable name="in" select="/" />

  <xsl:variable name="publishers" as="xs:string*"
    select="distinct-values(/booklist/book/publisher)" />

  <xsl:template match="/">
    <html>
      <head>
        <title>Sales volume by publisher</title>
      </head>
      <body>
        <h1>Sales volume by publisher</h1>
        <table id="{generate-id(.)}">
          <tr>
            <th>Publisher</th>
            <th>Total Sales Value</th>
          </tr>
          <xsl:for-each select="$publishers">
            <tr>
              <td>
                <xsl:value-of select="." />
              </td>
              <td>
                <xsl:call-template name="total-sales" />
              </td>
            </tr>
          </xsl:for-each>
        </table>
      </body>
    </html>
  </xsl:template>

  <xsl:template name="total-sales">
    <xsl:param name="publisher" select="." />
    <xsl:value-of select="sum($in/key('pub',$publisher)/sales)" />
  </xsl:template>
</xsl:stylesheet>

Output:

<html>
   <head>
      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
      <title>Sales volume by publisher</title>
   </head>
   <body>
      <h1>Sales volume by publisher</h1>
      <table id="d2">
         <tr>
            <th>Publisher</th>
            <th>Total Sales Value</th>
         </tr>
         <tr>
            <td>publisher 1</td>
            <td>235</td>
         </tr>
         <tr>
            <td>publisher 2</td>
            <td>12</td>
         </tr>
      </table>
   </body>
</html>

 
Related examples in the same category
1. Parent and attribute
2. select="../@attribute"
3. child
4. Get value from tag with {}
5. Node selection by level
6. Select Node by index
7. Select attribute value and output to a list
8. context position and context size
9. select with if then else
10. select="document('')/*/book:category[@code=current()/@category]/@desc"
11. Select one from the target value list
12. select="@*" (at)
13. Select one tag from a list of tags
14. select="employees/employee[2]/following::contact/name/firstName"
15. select="employees/employee[2]/preceding::contact/name/firstName"
16. select="employee[@dept='programming']"
17. select="employees/head:header/namespace::head"
18. value-of select="person[position()=3]/name"
www.java2java.com | Contact Us
Copyright 2010 - 2030 Java Source and Support. All rights reserved.
All other trademarks are property of their respective owners.