【问题标题】:how to make group in xslt?如何在 xslt 中创建组?
【发布时间】:2018-06-26 00:51:13
【问题描述】:

能否请您告诉我如何在 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>

你能告诉我怎么做组吗

【问题讨论】:

  • 组“A---D”、“E---I”、“J---P”和“Q---Z”是否固定?
  • 是的 ..make tham 修复了 ...
  • 能否请您告诉我,我将扩展我的功能
  • 您的输出包含cb,您的输入中没有出现?你的问题是错字吗?
  • 是的,你可以添加这个或删除这个。我只需要逻辑

标签: xml xslt xslt-1.0 xslt-grouping


【解决方案1】:

这给了我你想要的输出:

<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>

不过可能有更简单的方法来存档。

【讨论】:

  • @user5711656 - $lettersQZ 变量中有一个小错字;您需要从值中删除p
  • 正如 DanielHaley 所说。我刚刚编辑了它。 @user5711656 您可能应该自己阅读代码并理解它。只是说...^^
猜你喜欢
  • 1970-01-01
  • 2019-05-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多