Asp.net XSLT1.0子字符串,然后选择distinct

Asp.net XSLT1.0子字符串,然后选择distinct,asp.net,xml,xslt,visual-studio-2012,xslt-1.0,Asp.net,Xml,Xslt,Visual Studio 2012,Xslt 1.0,我对xslt非常陌生,因此非常感谢您的帮助。下面是我的示例xml文件 <DocumentElement> <Records> <date>2014-07-01 00:00</date> </Records> <Records> <date>2014-08-03 00:00</date> </Records> <

我对xslt非常陌生,因此非常感谢您的帮助。下面是我的示例xml文件

 <DocumentElement>
     <Records>
       <date>2014-07-01 00:00</date>
    </Records>

    <Records>
       <date>2014-08-03 00:00</date>
    </Records>
     <Records>
       <date>2013-08-03 00:00</date>
    </Records>
 <DocumentElement>

2014-07-01 00:00
2014-08-03 00:00
2013-08-03 00:00
我需要的只是从日期中选择不同的年份

目前我有下面的xslt,它带来了重复的年份

<?xml version="1.0" encoding="utf-8"?>
 <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl" xmlns:ms="urn:schemas-microsoft-com:xslt">
 <xsl:output method="xml" indent="yes"/>

  <xsl:template match="/">

<xsl:variable name="years" select="DocumentElement/Records/date"/>

<ul>
  <xsl:for-each select="$years">
    <li>
      <xsl:element name="a">

        <xsl:attribute name="href">
          <xsl:value-of select="concat('?archive=',substring( ., 1, 4))"/>
        </xsl:attribute>

        <xsl:value-of select="substring( ., 1, 4)"/>
      </xsl:element>

    </li>
  </xsl:for-each>
</ul>
  </xsl:template>

 </xsl:stylesheet>

结果如下:

<ul>
  <li>
    <a href="?archive=2014">2014</a>
 </li>
 <li>
  <a href="?archive=2014">2014</a>
 </li>
 <li>
   <a href="?archive=2014">2013</a>
  </li>
 </ul>
但我的预期结果应该是

  <ul>
  <li>
    <a href="?archive=2014">2014</a>
 </li>

 <li>
   <a href="?archive=2014">2013</a>
  </li>
 </ul>
我尝试了以下操作,但得到了空输出

   <?xml version="1.0" encoding="utf-8"?>
      <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
   xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl" xmlns:ms="urn:schemas-microsoft-com:xslt">
  <xsl:output method="xml" indent="yes"/>


  <xsl:template match="/">

   <xsl:variable name="years" select="substring(DocumentElement/Records/date, 1, 4)"/>

   <ul>
  <xsl:for-each select="$years[not(.=preceding::*)]">
    <li>
      <xsl:element name="a">

        <xsl:attribute name="href">
          <xsl:value-of select="concat('?archive=',substring( ., 1, 4))"/>
        </xsl:attribute>

        <xsl:value-of select="substring( ., 1, 4)"/>
      </xsl:element>

    </li>
  </xsl:for-each>
</ul>
</xsl:template>

   </xsl:stylesheet>


任何帮助都将不胜感激。谢谢。

在XSLT1.0中,Muenchian分组比使用前/后/前同级/后同级轴更有效。试试这个:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >
<xsl:output method="xml" indent="yes"/>
<xsl:key name="Date" match="DocumentElement/Records/date" use="substring(.,1,4)"/>
<xsl:template match="/">
    <ul>
        <xsl:for-each select="DocumentElement/Records/date[generate-id() = generate-id(key('Date', substring(.,1,4))[1])]">
            <li>
                <a href="{concat('?archive=',substring(.,1,4))}">
                    <xsl:value-of select="substring( ., 1, 4)"/>
                </a>
            </li>
        </xsl:for-each>
    </ul>
</xsl:template>
</xsl:stylesheet>


在XSLT1.0中,Muenchian分组比使用前/后/前同级/后同级轴更有效。试试这个:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >
<xsl:output method="xml" indent="yes"/>
<xsl:key name="Date" match="DocumentElement/Records/date" use="substring(.,1,4)"/>
<xsl:template match="/">
    <ul>
        <xsl:for-each select="DocumentElement/Records/date[generate-id() = generate-id(key('Date', substring(.,1,4))[1])]">
            <li>
                <a href="{concat('?archive=',substring(.,1,4))}">
                    <xsl:value-of select="substring( ., 1, 4)"/>
                </a>
            </li>
        </xsl:for-each>
    </ul>
</xsl:template>
</xsl:stylesheet>


在XSLT1.0中,Muenchian分组比使用前/后/前同级/后同级轴更有效。试试这个:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >
<xsl:output method="xml" indent="yes"/>
<xsl:key name="Date" match="DocumentElement/Records/date" use="substring(.,1,4)"/>
<xsl:template match="/">
    <ul>
        <xsl:for-each select="DocumentElement/Records/date[generate-id() = generate-id(key('Date', substring(.,1,4))[1])]">
            <li>
                <a href="{concat('?archive=',substring(.,1,4))}">
                    <xsl:value-of select="substring( ., 1, 4)"/>
                </a>
            </li>
        </xsl:for-each>
    </ul>
</xsl:template>
</xsl:stylesheet>


在XSLT1.0中,Muenchian分组比使用前/后/前同级/后同级轴更有效。试试这个:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >
<xsl:output method="xml" indent="yes"/>
<xsl:key name="Date" match="DocumentElement/Records/date" use="substring(.,1,4)"/>
<xsl:template match="/">
    <ul>
        <xsl:for-each select="DocumentElement/Records/date[generate-id() = generate-id(key('Date', substring(.,1,4))[1])]">
            <li>
                <a href="{concat('?archive=',substring(.,1,4))}">
                    <xsl:value-of select="substring( ., 1, 4)"/>
                </a>
            </li>
        </xsl:for-each>
    </ul>
</xsl:template>
</xsl:stylesheet>