如何在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>
虽然可能有更简单的方法来存档它。
你能告诉我如何在 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>
虽然可能有更简单的方法来存档它。