使用xsl:for-each-group分组后内容重复4次的问题排查
XSLT按
<eop>分组内容重复问题排查 需要将XML文档解析为HTML,其中<eop>为分页节点。使用xsl:for-each-group按<eop>分组后,每组内容重复显示4次,不符合预期。
XML代码
before eo after point content point content before eo 387 after 387 content 5 before eop 388 after 388
原始XSLT代码
当前错误输出
before eo after before eo after before eo after before eo
预期输出(第一组)
<div> before eo</div>
问题原因
- 分组节点范围错误:
select="mainBody/descendant::node()"会选中所有后代节点,包括article_1、content、p这类元素节点,以及文本节点。这些元素节点的字符串值是其所有后代文本的拼接(即before eo after),加上原本的目标文本节点,第一组内共有4个节点的字符串值重复。 - 输出方式错误:
<xsl:value-of select="$groups(1)"/>会输出数组内所有节点的字符串值,直接导致内容重复四次。
解决方法
方法一:缩小分组节点范围,仅选中文本和<eop>元素
修改分组的select属性,只选取文本节点和<eop>元素,避免包含父元素节点:
方法二:按段落内节点分组,精准定位分页位置
如果分页仅针对<p>内的内容,可直接在<p>节点内分组,避免跨元素干扰:
说明
两种方法都能避免父元素节点的字符串值重复输出,同时精准提取<eop>之前的内容作为分页块。方法二更适合分页仅作用于段落内的场景,逻辑更清晰。
内容的提问来源于stack exchange,提问作者Yael Stack
相关产品推荐
相关产品推荐

