通八洲科技

如何使用 XSLT 将具有不同 class 值的相邻元素智能归组为统一容器

日期:2025-12-29 00:00 / 作者:花韻仙語

本文详解如何在 xslt 2.0+ 中通过 `group-adjacent` 配合 `replace()` 函数,将语义相关但 class 名称不同的相邻 html 元素(如 `warning` 和 `warninglistbullet`)合并到同一 `

` 容器中。

在实际 HTML 结构化处理中,常遇到一类典型需求:多个视觉/语义上属于同一逻辑区块的元素,却因历史原因或 CMS 输出策略被赋予了不同但高度相关的 class 名称(例如 warning、warninglistbullet)。此时若直接按 @class 值分组,它们会被拆散;而简单用布尔表达式(如 @class = 'warning' or @class = 'warninglistbullet')作为 group-adjacent 的分组键,则无法保证“相邻性”——因为该表达式对所有匹配元素返回相同布尔值,导致所有同类元素被强行归为一组,无论其在 DOM 中是否真正相邻。

正确解法是构造一个归一化的分组键:对原始 @class 值进行预处理,将语义等价的 class 映射为同一标识符。XSLT 2.0+ 提供的 replace() 函数正适用于此场景:


    
        
        
            
                
                
                    
                        
                    
                
                
                
                    
                
            
        
    

该方案的关键在于:

⚠️ 注意事项:

通过这种键值归一化策略,我们既保留了原始 HTML 的结构完整性,又实现了语义驱动的智能容器封装,为后续 CSS 样式统一、无障碍增强或内容提取奠定了坚实基础。