如何在xslt中创建组?

how to make group in xslt?

你能告诉我如何在 xslt 1 中创建组吗?

我正在尝试通过分组使列表按字母顺序排列

这是我的代码

http://xsltransform.net/jxN8Npy

XML

<body>
   <a>d</a>
   <a>c</a>
   <a>d</a>
   <a>c</a>
   <a>abc</a>
   <a>dee</a>
   <a>pu</a>
   <a>gu</a>

</body>

XSLT

<?xml version="1.0" encoding="UTF-8" ?>
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
    <xsl:output method="html" doctype-public="XSLT-compat" omit-xml-declaration="yes" encoding="UTF-8" indent="yes" />

    <xsl:template match="body">
      <hmtl>
        <head>
          <title>New Version!</title>
        </head>
        <ul>
            <xsl:apply-templates select="a"/> 
        </ul>

      </hmtl>
    </xsl:template>

   <xsl:template match="a">
   <li>
        <xsl:value-of select="."/>
   </li>

   </xsl:template>
</xsl:transform>

当前输出

<ul>
      <li>d</li>
      <li>c</li>
      <li>d</li>
      <li>c</li>
      <li>abc</li>
      <li>dee</li>
      <li>pu</li>
      <li>gu</li>
   </ul>

预期输出

<ul>
  <li> A---D</li>
   <li>abc</li>
    <li>c</li>
    <li>cb</li>
     <li>d</li>
     <li>dee</li>
    <li> E---I</li>
      <li>gu</li>
   <li> J---P</li>
      <li>pu</li>
   <li> Q---Z</li>
   </ul>

能告诉我怎么加群吗

这给了我你想要的输出:

<xsl:variable name="lettersAD" select="'ABCDabcd'"/>
<xsl:variable name="lettersEI" select="'EFGHIefghi'"/>
<xsl:variable name="lettersJP" select="'JKLMNOPjklmnop'"/>
<xsl:variable name="lettersQZ" select="'QRSTUVWXYZqrstuvwxyz'"/>

<xsl:template match="a">
    <li><xsl:value-of select="."/></li>
</xsl:template>

<xsl:template match="/">
    <ul>
        <li>A---D</li>
        <xsl:apply-templates select="//a[contains($lettersAD, substring(.,1,1))]">
            <xsl:sort select="text()" data-type="text"/>
        </xsl:apply-templates>
        <li>E---I</li>
        <xsl:apply-templates select="//a[contains($lettersEI, substring(.,1,1))]">
            <xsl:sort select="text()" data-type="text"/>
        </xsl:apply-templates>
        <li>J---P</li>
        <xsl:apply-templates select="//a[contains($lettersJP, substring(.,1,1))]">
            <xsl:sort select="text()" data-type="text"/>
        </xsl:apply-templates>
        <li>Q---Z</li>
        <xsl:apply-templates select="//a[contains($lettersQZ, substring(.,1,1))]">
            <xsl:sort select="text()" data-type="text"/>
        </xsl:apply-templates>
    </ul>
</xsl:template>

虽然可能有更简单的方法来存档它。