按年份和月份将新闻列表转换为HTML菜单分组
目标是输出一个按年份和月份将新闻列表转换为HTML菜单分组,html,xml,xslt,xslt-1.0,Html,Xml,Xslt,Xslt 1.0,目标是输出一个,使用XSLT1.0删除按年份分组的重复月份 这似乎与类似,但我不确定如何翻译以下标记的解决方案: <news> <entry> <title>News Item 1</title> <meta> <year>2011</year> <month>12</month>
,使用XSLT1.0删除按年份分组的重复月份
这似乎与类似,但我不确定如何翻译以下标记的解决方案:
<news>
<entry>
<title>News Item 1</title>
<meta>
<year>2011</year>
<month>12</month>
<day>05</day>
</meta>
</entry>
<entry>
<title>News Item 2</title>
<meta>
<year>2011</year>
<month>12</month>
<day>09</day>
</meta>
</entry>
<entry>
<title>News Item 3</title>
<meta>
<year>2011</year>
<month>11</month>
<day>25</day>
</meta>
</entry>
<entry>
<title>News Item 4</title>
<meta>
<year>2011</year>
<month>10</month>
<day>16</day>
</meta>
</entry>
<entry>
<title>News Item 5</title>
<meta>
<year>2011</year>
<month>12</month>
<day>05</day>
</meta>
</entry>
<entry>
<title>News Item 6</title>
<meta>
<year>2010</year>
<month>06</month>
<day>13</day>
</meta>
</entry>
</news>
新闻项目1
2011
12
05
新闻项目2
2011
12
09
新闻项目3
2011
11
25
新闻项目4
2011
10
16
新闻项目5
2011
12
05
新闻项目6
2010
06
13
期望输出
-
-
-
-
-
-
此转换:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:key name="kEntryByYear" match="entry"
use="meta/year"/>
<xsl:key name="kMetaByYearMonth" match="meta"
use="concat(year, '+', month)"/>
<xsl:template match="/*">
<ul>
<xsl:apply-templates select=
"entry
[generate-id()
=
generate-id(key('kEntryByYear',
meta/year
)[1]
)
]
">
<xsl:sort select="meta/year" data-type="number"
order="descending"/>
</xsl:apply-templates>
</ul>
</xsl:template>
<xsl:template match="entry">
<li>
<a href="#"><xsl:value-of select="meta/year"/></a>
<ul>
<xsl:apply-templates select=
"key('kEntryByYear', meta/year)/meta
[generate-id()
=
generate-id(key('kMetaByYearMonth',
concat(year, '+', month)
)[1]
)
]
">
<xsl:sort select="month"
data-type="number" order="descending"/>
</xsl:apply-templates>
</ul>
</li>
</xsl:template>
<xsl:template match="meta">
<li>
<a href="#"><xsl:value-of select="month"/></a>
</li>
</xsl:template>
</xsl:stylesheet>
应用于提供的XML文档时:
<news>
<entry>
<title>News Item 1</title>
<meta>
<year>2011</year>
<month>12</month>
<day>05</day>
</meta>
</entry>
<entry>
<title>News Item 2</title>
<meta>
<year>2011</year>
<month>12</month>
<day>09</day>
</meta>
</entry>
<entry>
<title>News Item 3</title>
<meta>
<year>2011</year>
<month>11</month>
<day>25</day>
</meta>
</entry>
<entry>
<title>News Item 4</title>
<meta>
<year>2011</year>
<month>10</month>
<day>16</day>
</meta>
</entry>
<entry>
<title>News Item 5</title>
<meta>
<year>2011</year>
<month>12</month>
<day>05</day>
</meta>
</entry>
<entry>
<title>News Item 6</title>
<meta>
<year>2010</year>
<month>06</month>
<day>13</day>
</meta>
</entry>
</news>
<ul>
<li>
<a href="#">2011</a>
<ul>
<li>
<a href="#">12</a>
</li>
<li>
<a href="#">11</a>
</li>
<li>
<a href="#">10</a>
</li>
</ul>
</li>
<li>
<a href="#">2010</a>
<ul>
<li>
<a href="#">06</a>
</li>
</ul>
</li>
</ul>
新闻项目1
2011
12
05
新闻项目2
2011
12
09
新闻项目3
2011
11
25
新闻项目4
2011
10
16
新闻项目5
2011
12
05
新闻项目6
2010
06
13
生成所需的正确结果:
<news>
<entry>
<title>News Item 1</title>
<meta>
<year>2011</year>
<month>12</month>
<day>05</day>
</meta>
</entry>
<entry>
<title>News Item 2</title>
<meta>
<year>2011</year>
<month>12</month>
<day>09</day>
</meta>
</entry>
<entry>
<title>News Item 3</title>
<meta>
<year>2011</year>
<month>11</month>
<day>25</day>
</meta>
</entry>
<entry>
<title>News Item 4</title>
<meta>
<year>2011</year>
<month>10</month>
<day>16</day>
</meta>
</entry>
<entry>
<title>News Item 5</title>
<meta>
<year>2011</year>
<month>12</month>
<day>05</day>
</meta>
</entry>
<entry>
<title>News Item 6</title>
<meta>
<year>2010</year>
<month>06</month>
<day>13</day>
</meta>
</entry>
</news>
<ul>
<li>
<a href="#">2011</a>
<ul>
<li>
<a href="#">12</a>
</li>
<li>
<a href="#">11</a>
</li>
<li>
<a href="#">10</a>
</li>
</ul>
</li>
<li>
<a href="#">2010</a>
<ul>
<li>
<a href="#">06</a>
</li>
</ul>
</li>
</ul>
-
-
-
-
-
-
说明:
<news>
<entry>
<title>News Item 1</title>
<meta>
<year>2011</year>
<month>12</month>
<day>05</day>
</meta>
</entry>
<entry>
<title>News Item 2</title>
<meta>
<year>2011</year>
<month>12</month>
<day>09</day>
</meta>
</entry>
<entry>
<title>News Item 3</title>
<meta>
<year>2011</year>
<month>11</month>
<day>25</day>
</meta>
</entry>
<entry>
<title>News Item 4</title>
<meta>
<year>2011</year>
<month>10</month>
<day>16</day>
</meta>
</entry>
<entry>
<title>News Item 5</title>
<meta>
<year>2011</year>
<month>12</month>
<day>05</day>
</meta>
</entry>
<entry>
<title>News Item 6</title>
<meta>
<year>2010</year>
<month>06</month>
<day>13</day>
</meta>
</entry>
</news>
<ul>
<li>
<a href="#">2011</a>
<ul>
<li>
<a href="#">12</a>
</li>
<li>
<a href="#">11</a>
</li>
<li>
<a href="#">10</a>
</li>
</ul>
</li>
<li>
<a href="#">2010</a>
<ul>
<li>
<a href="#">06</a>
</li>
</ul>
</li>
</ul>
meta/year
)对条目进行的慕尼黑分组
年
和月
,通过复合键对元
进行Muenchian分组此转换:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:key name="kEntryByYear" match="entry"
use="meta/year"/>
<xsl:key name="kMetaByYearMonth" match="meta"
use="concat(year, '+', month)"/>
<xsl:template match="/*">
<ul>
<xsl:apply-templates select=
"entry
[generate-id()
=
generate-id(key('kEntryByYear',
meta/year
)[1]
)
]
">
<xsl:sort select="meta/year" data-type="number"
order="descending"/>
</xsl:apply-templates>
</ul>
</xsl:template>
<xsl:template match="entry">
<li>
<a href="#"><xsl:value-of select="meta/year"/></a>
<ul>
<xsl:apply-templates select=
"key('kEntryByYear', meta/year)/meta
[generate-id()
=
generate-id(key('kMetaByYearMonth',
concat(year, '+', month)
)[1]
)
]
">
<xsl:sort select="month"
data-type="number" order="descending"/>
</xsl:apply-templates>
</ul>
</li>
</xsl:template>
<xsl:template match="meta">
<li>
<a href="#"><xsl:value-of select="month"/></a>
</li>
</xsl:template>
</xsl:stylesheet>
应用于提供的XML文档时:
<news>
<entry>
<title>News Item 1</title>
<meta>
<year>2011</year>
<month>12</month>
<day>05</day>
</meta>
</entry>
<entry>
<title>News Item 2</title>
<meta>
<year>2011</year>
<month>12</month>
<day>09</day>
</meta>
</entry>
<entry>
<title>News Item 3</title>
<meta>
<year>2011</year>
<month>11</month>
<day>25</day>
</meta>
</entry>
<entry>
<title>News Item 4</title>
<meta>
<year>2011</year>
<month>10</month>
<day>16</day>
</meta>
</entry>
<entry>
<title>News Item 5</title>
<meta>
<year>2011</year>
<month>12</month>
<day>05</day>
</meta>
</entry>
<entry>
<title>News Item 6</title>
<meta>
<year>2010</year>
<month>06</month>
<day>13</day>
</meta>
</entry>
</news>
<ul>
<li>
<a href="#">2011</a>
<ul>
<li>
<a href="#">12</a>
</li>
<li>
<a href="#">11</a>
</li>
<li>
<a href="#">10</a>
</li>
</ul>
</li>
<li>
<a href="#">2010</a>
<ul>
<li>
<a href="#">06</a>
</li>
</ul>
</li>
</ul>
新闻项目1
2011
12
05
新闻项目2
2011
12
09
新闻项目3
2011
11
25
新闻项目4
2011
10
16
新闻项目5
2011
12
05
新闻项目6
2010
06
13
生成所需的正确结果:
<news>
<entry>
<title>News Item 1</title>
<meta>
<year>2011</year>
<month>12</month>
<day>05</day>
</meta>
</entry>
<entry>
<title>News Item 2</title>
<meta>
<year>2011</year>
<month>12</month>
<day>09</day>
</meta>
</entry>
<entry>
<title>News Item 3</title>
<meta>
<year>2011</year>
<month>11</month>
<day>25</day>
</meta>
</entry>
<entry>
<title>News Item 4</title>
<meta>
<year>2011</year>
<month>10</month>
<day>16</day>
</meta>
</entry>
<entry>
<title>News Item 5</title>
<meta>
<year>2011</year>
<month>12</month>
<day>05</day>
</meta>
</entry>
<entry>
<title>News Item 6</title>
<meta>
<year>2010</year>
<month>06</month>
<day>13</day>
</meta>
</entry>
</news>
<ul>
<li>
<a href="#">2011</a>
<ul>
<li>
<a href="#">12</a>
</li>
<li>
<a href="#">11</a>
</li>
<li>
<a href="#">10</a>
</li>
</ul>
</li>
<li>
<a href="#">2010</a>
<ul>
<li>
<a href="#">06</a>
</li>
</ul>
</li>
</ul>
-
-
-
-
-
-
说明:
<news>
<entry>
<title>News Item 1</title>
<meta>
<year>2011</year>
<month>12</month>
<day>05</day>
</meta>
</entry>
<entry>
<title>News Item 2</title>
<meta>
<year>2011</year>
<month>12</month>
<day>09</day>
</meta>
</entry>
<entry>
<title>News Item 3</title>
<meta>
<year>2011</year>
<month>11</month>
<day>25</day>
</meta>
</entry>
<entry>
<title>News Item 4</title>
<meta>
<year>2011</year>
<month>10</month>
<day>16</day>
</meta>
</entry>
<entry>
<title>News Item 5</title>
<meta>
<year>2011</year>
<month>12</month>
<day>05</day>
</meta>
</entry>
<entry>
<title>News Item 6</title>
<meta>
<year>2010</year>
<month>06</month>
<day>13</day>
</meta>
</entry>
</news>
<ul>
<li>
<a href="#">2011</a>
<ul>
<li>
<a href="#">12</a>
</li>
<li>
<a href="#">11</a>
</li>
<li>
<a href="#">10</a>
</li>
</ul>
</li>
<li>
<a href="#">2010</a>
<ul>
<li>
<a href="#">06</a>
</li>
</ul>
</li>
</ul>
meta/year
)对条目进行的慕尼黑分组
年
和月
,通过复合键对元
进行Muenchian分组快速准确的回答。谢谢,非常感谢您的帮助。快速准确的回答。谢谢你,非常感谢你的帮助。