Magento用Xtento导出产品feed时如何通过XSL substring获取分类路径第三段值
XSL截取分类路径第三段调整方案
现有逻辑问题
当前代码在截取分类路径时,仅通过两次substring-after操作跳过了前两级分类对应的分隔符,未对截取后的剩余字符串做二次截断,因此会输出从第三段开始到路径末尾的全部内容,与仅取第三段值的需求不匹配。
调整后代码
<!--product_type --> <xsl:element name="product_type"> <xsl:choose> <xsl:when test="string(xtento_mapped_category)"> <xsl:value-of select="xtento_mapped_category"/> </xsl:when> <xsl:when test="string(cats/cat[children_count=0]/path_name)"> <xsl:variable name="path_str" select="cats/cat[children_count=0]/path_name"/> <xsl:variable name="after_two_level" select="substring-after(substring-after($path_str,'>'),' > ')"/> <xsl:choose> <xsl:when test="contains($after_two_level, ' > ')"> <xsl:value-of select="substring-before($after_two_level, ' > ')"/> </xsl:when> <xsl:otherwise> <xsl:value-of select="$after_two_level"/> </xsl:otherwise> </xsl:choose> </xsl:when> <xsl:otherwise> <xsl:variable name="path_str" select="parent_item/cats/cat[children_count=0]/path_name"/> <xsl:variable name="after_two_level" select="substring-after(substring-after($path_str,'>'),' > ')"/> <xsl:choose> <xsl:when test="contains($after_two_level, ' > ')"> <xsl:value-of select="substring-before($after_two_level, ' > ')"/> </xsl:when> <xsl:otherwise> <xsl:value-of select="$after_two_level"/> </xsl:otherwise> </xsl:choose> </xsl:otherwise> </xsl:choose> </xsl:element>
逻辑说明
- 完全保留原代码的分支优先级规则:优先输出映射分类值,其次读取当前产品关联的叶子分类路径,最后读取父级产品的关联叶子分类路径
- 截取逻辑匹配现有路径结构:以路径中的
>(即分隔展示的>)为分段标记,连续两次跳过前两段分类内容,和原代码的截取起点完全对齐,不会出现路径错位问题 - 新增截断逻辑:对跳过前两段后的剩余字符串,优先匹配下一个分隔符,截取分隔符前的内容即为第三段分类值
- 兼容边界场景:如果分类路径总长度刚好为3段、不存在后续分隔符时,直接输出剩余的字符串内容,不会出现空值报错
- 效果验证:针对示例路径
Women > Undies > Thong Underwear > Cotton Thong Underwear,最终输出值为Thong Underwear,完全匹配需求
注:如果
xtento_mapped_category返回的也是带相同分隔符的路径字符串,可将对应分支的输出逻辑替换为上述相同的截取流程,保证全字段输出规则统一。
内容的提问来源于stack exchange,提问作者ovadt
相关产品推荐
相关产品推荐

