使用XSLT统计每月Blog数量结果异常,请求排查问题
嘿,要排查这个月度博客统计的错误,得先看看你的XML文档结构和当前的XSLT实现代码才行!不过我先给你列几个高频踩坑点,你可以先对照着自查:
常见错误排查方向
- 日期格式不兼容:如果部分博客的日期不是XSLT标准识别的格式(比如
YYYY-MM-DD),调用month()这类日期函数会返回无效值,导致这部分博客被错误归类或忽略。 - 节点选择范围错误:你是不是没精准定位到
content节点下的博客?比如误写了//blog而不是/root/content/blog,可能会统计到其他区域的博客条目。 - 分组逻辑疏漏:如果只按月份数字分组(比如
month(date)),不同年份的同月份博客会被合并统计;另外XSLT 1.0和2.0的分组语法差异很大,用错版本的写法也会出问题。 - 日期提取错误:如果日期字段嵌套在其他节点里,或者你用了错误的路径获取日期(比如写成
date而不是meta/date),会导致分组依据为空,统计结果全错。
给你贴个正确实现的参考例子,方便你对比:
假设你的XML结构是这样的:
<site> <content> <blog> <title>我的第一篇博客</title> <publish-date>2024-03-10</publish-date> </blog> <blog> <title>三月第二篇</title> <publish-date>2024-03-22</publish-date> </blog> <blog> <title>四月新更</title> <publish-date>2024-04-05</publish-date> </blog> </content> </site>
XSLT 2.0+ 版本实现
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="text" encoding="UTF-8"/> <xsl:template match="/"> <!-- 按「年-月」分组,避免跨年份同月份混淆 --> <xsl:for-each-group select="site/content/blog" group-by="concat(year(publish-date), '-', format-number(month(publish-date), '00'))"> <xsl:sort select="current-grouping-key()"/> <xsl:value-of select="current-grouping-key()"/> : <xsl:value-of select="count(current-group())"/> <xsl:text> </xsl:text> </xsl:for-each-group> </xsl:template> </xsl:stylesheet>
XSLT 1.0 版本实现(用key分组)
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="text" encoding="UTF-8"/> <!-- 按日期的前7位(YYYY-MM)作为key --> <xsl:key name="blogByMonth" match="site/content/blog" use="substring(publish-date, 1, 7)"/> <xsl:template match="/"> <xsl:for-each select="site/content/blog[generate-id() = generate-id(key('blogByMonth', substring(publish-date, 1, 7))[1])]"> <xsl:sort select="substring(publish-date, 1, 7)"/> <xsl:value-of select="substring(publish-date, 1, 7)"/> : <xsl:value-of select="count(key('blogByMonth', substring(publish-date, 1, 7)))"/> <xsl:text> </xsl:text> </xsl:for-each> </xsl:template> </xsl:stylesheet>
你可以把你的XML结构和当前的XSLT代码贴出来,我帮你精准定位问题!
内容的提问来源于stack exchange,提问作者Computer
相关产品推荐
相关产品推荐

