如何通过XSLT为已有filter类的div标签添加新类(避免覆盖)
解决方案:保留原有类并添加新类
我懂你的问题啦——你想给原本带有filter类的<div>同时加上从Category节点获取的新类,但当前的写法会把原来的filter类覆盖掉,只留下新类,对吧?
问题出在哪?
你当前的代码里,先给<div>设置了class="filter",紧接着又用<xsl:attribute name="class">重新赋值这个属性,这会完全覆盖掉之前的class值,所以原本的filter类就丢失了,哪怕你在<xsl:if>里写了filter,也只有当条件满足时才会输出,还容易出现类名连在一起(没空格)的问题。
最简洁的解决方法:使用属性值模板
XSLT的属性值模板能帮你轻松实现这个需求,直接在class属性里插入Category的值即可,自动和原有类用空格分隔:
<div class="filter {Category}"> <!-- 这里放div的内容 --> </div>
这个写法的好处:
- 自动保留
filter类,同时添加Category节点的内容作为新类 - 如果
Category为空,class属性只会是filter,不会出现多余的空格
另一种写法:显式拼接类名(适合复杂场景)
如果你需要更精细的控制(比如处理Category可能为空或有多余空格的情况),可以用concat结合normalize-space函数:
<div> <xsl:attribute name="class"> <xsl:value-of select="normalize-space(concat('filter ', Category))"/> </xsl:attribute> <!-- 这里放div的内容 --> </div>
normalize-space会自动去掉字符串首尾的空格,同时把中间的多个空格换成单个,避免出现无效的空类名。
内容的提问来源于stack exchange,提问作者ayush mishra
相关产品推荐
相关产品推荐

