gpt4 book ai didi

html - 将新闻列表转换为按年和月分组的 HTML 菜单

转载 作者:行者123 更新时间:2023-11-28 03:43:35 25 4
gpt4 key购买 nike

目标是输出一个<ul>使用 xslt 1.0 删除按年分组的重复月份。

这似乎类似于 Grouping XML nodes by Month and Year in XSLT但我不确定如何翻译以下标记的解决方案:

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

最佳答案

这个转换:

<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. 通过单个键 (meta/year) 对 entry 进行 Muenchian 分组。

  2. 根据 yearmonth,通过复合键对 meta 进行 Muenchian 分组。

关于html - 将新闻列表转换为按年和月分组的 HTML 菜单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8584134/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com