<?xml version="1.0"?>

<?xml-stylesheet type="text/xsl"
  href="ApplyEmbeddedStylesheet.xsl?supportALL.xml"?>
<?xml-stylesheet type="text/xsl" href="#style1"?>

<!DOCTYPE browsers [
<!ATTLIST xsl:stylesheet id ID #REQUIRED>
]>

<browsers>
  <browser name="Firefox">
    <version os="Linux">3.0</version>
    <version os="Linux">1.0</version>
    <version os="Win">3.0</version>
    <version os="Win">3.5</version>
  </browser>
  <browser name="Opera">
    <version os="Linux">10</version>
    <version os="Win">10</version>
  </browser>
  <browser name="Safari">
    <version os="Win">4</version>
    <version os="Mac">4</version>
  </browser>
  <browser name="Internet Explorer">
    <version os="Win">6</version>
    <version os="Win">8</version>
    <version os="Mobile">6</version>
    <version os="Win">7</version>
  </browser>
  <browser name="Chrome">
    <version os="Win">4.0</version>
  </browser>

  <browser name="Opera Mini">
    <version os="Mobile">4.2</version>
  </browser>

<!-- 
  This stylesheet is a modification from this posting:
  http://www.biglist.com/lists/lists.mulberrytech.com/xsl-list/archives/200010/msg01150.html
-->
<xsl:stylesheet id="style1" version="1.0" 
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

  <!-- only needed by "Opera Mini"; output method here IS "html" even 
       without explicit declaration, see http://www.w3.org/TR/xslt#output -->
  <xsl:output method="html"/>

  <xsl:key name="b" match="@os" use="."/>
  <xsl:template match="/">
    <html>  
      <body>
        <i>ApplyStylesheetEmbedding.xsl technique</i> works for:
        <table border="1" cellspacing="0">
          <!-- Generate the row of table header cells -->
          <tr>
            <th>Browser \ OS</th>
            <!-- 
             | Generate a header cell for each unique os name
             |
             | See Chapter 9 of "Building Oracle XML Applications" from O'Reilly
             | for a detailed explanation of how this <xsl:key> based technique works
             +-->
            <xsl:for-each select="//@os[generate-id(.)=generate-id(key('b',.)[1])]">
              <!-- Sort by the os name (the value of the current @os attribute -->
              <xsl:sort select="."/>
              <th bgcolor="cyan">
                <xsl:value-of select="."/>
              </th>
            </xsl:for-each>
          </tr>
        <!-- Generate a row for each browser -->
        <xsl:for-each select="browsers/browser">
          <!-- Sort by browser name -->
          <xsl:sort select="@name"/>
          <!-- Keep the current browser in a variable for later -->
          <xsl:variable name="cur" select="."/>
          <tr>
            <!-- First cell has the browser's name -->
            <td bgcolor="yellow"><xsl:value-of select="@name"/></td>
            <!-- Generate a cell for each unique os -->
            <xsl:for-each select="//@os[generate-id(.)=generate-id(key('b',.)[1])]">
              <!-- Sort by the os name (the value of the current @os attribute -->
              <xsl:sort select="."/>
              <td>
                <!-- If no versions for current browser in current os, do &nbsp; -->
                <xsl:if test="not($cur/version[@os=current()])">&#160;</xsl:if>
                <!-- List matching versions for current browser in current os -->
                <xsl:for-each select="$cur/version[@os=current()]">
                  <xsl:sort select="." data-type="number" />
                  <xsl:value-of select="."/>
                  <xsl:if test="position() != last()"><br/></xsl:if>
                </xsl:for-each>
              </td>
            </xsl:for-each>
          </tr>
        </xsl:for-each>
      </table>
<ul>
<li>
added Win/IE7 based on this <a href="http://forums.devshed.com/showpost.php?p=2485043&amp;postcount=11">posting</a>
</li>
</ul>
    </body>
  </html>
  </xsl:template>
  <xsl:template match="xsl:stylesheet">
    <!-- ignore -->
  </xsl:template>
</xsl:stylesheet>

</browsers>
