XSLT分组转换:按SUBJECT分组及DocumentList节点校验实现需求
XSLT转换实现方案
你需要的节点校验、冗余数据过滤功能可通过调整现有XSLT代码实现,最终可用代码如下:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:output method="html" /> <!-- 分组规则:按SUBJECT字段对Document节点分组 --> <xsl:key name="groups" match="//KnowledgeBaseAdvancedSearchResponse/DocumentList/Document" use="SUBJECT" /> <xsl:template match="/"> <!-- 校验DocumentList节点是否存在 --> <xsl:choose> <xsl:when test="//KnowledgeBaseAdvancedSearchResponse/DocumentList"> <!-- 调用分组逻辑,每个SUBJECT分组仅输出一次,过滤冗余数据 --> <xsl:apply-templates select="//KnowledgeBaseAdvancedSearchResponse/DocumentList/Document[generate-id() = generate-id(key('groups', SUBJECT)[1])]" /> </xsl:when> <xsl:otherwise>no data found</xsl:otherwise> </xsl:choose> <!-- 错误信息校验 --> <xsl:choose> <xsl:when test="//Errors">There were errors.</xsl:when> </xsl:choose> </xsl:template> <!-- 分组后输出SUBJECT内容 --> <xsl:template match="Document"> <h1><xsl:value-of select="SUBJECT" /></h1> </xsl:template> </xsl:stylesheet>
功能说明
- 节点校验:根模板优先判断DocumentList节点是否存在,不存在时直接输出
no data found - 冗余过滤:保留原有Muenchian分组逻辑,相同SUBJECT的Document节点仅输出第一条,无重复内容
- 兼容参考框架:保留了参考代码中的错误节点校验逻辑
内容的提问来源于stack exchange,提问作者umang yadav
相关产品推荐
相关产品推荐

