You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Muenchian分组应用后产品层级variation块未在XML转换结果中生成

问题原因

你的XSLT代码的键匹配规则和分组路径和源XML结构不匹配:

  1. 你定义的<xsl:key name="groupbyproduct" match="offer" use="product"/>中match="offer"是完全错误的,源XML中不存在名为offer的节点,实际需要分组的是根节点下的Products节点
  2. 后续分组遍历用的select="offer[xxx]"路径也错误,找不到任何对应节点,所以分组部分完全没有输出

修复后的完整XSLT代码

将键匹配对象和分组遍历路径修改为对应源XML的Products节点即可:

<?xml version="1.0" encoding="UTF-16"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:s0="http://F.FlatFileSchema1" xmlns:xml="http://www.w3.org/XML/1998/namespace" exclude-result-prefixes="s0">
    <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
    <!-- 修正key的匹配对象为源XML中的Products节点 -->
    <xsl:key name="groupbyproduct" match="Products" use="product"/>
    <xsl:template match="/s0:Product">
        <enfinity xsi:schemaLocation="http://www.intershop.com/xml/ns/enfinity/7.0/xcs/impex catalog.xsd http://www.intershop.com/xml/ns/enfinity/6.5/core/impex-dt dt.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.intershop.com/xml/ns/enfinity/7.0/xcs/impex" xmlns:xml="http://www.w3.org/XML/1998/namespace" xmlns:dt="http://www.intershop.com/xml/ns/enfinity/6.5/core/impex-dt" major="6" minor="1" family="enfinity" branch="enterprise" build="build">
            <xsl:for-each select="Products">
                <offer sku="{sku}">
                    <custom-attributes>
                        <custom-attribute name="parentcolour" dt:dt="string" xml:lang="en-US">
                            <xsl:value-of select="parentcolour_EN/text()"/>
                        </custom-attribute>
                        <custom-attribute name="parentcolour" dt:dt="string" xml:lang="de-DE">
                            <xsl:value-of select="parentcolour_DE/text()"/>
                        </custom-attribute>
                    </custom-attributes>
                </offer>
            </xsl:for-each>
            <!-- 修正分组遍历的选择路径为Products节点 -->
            <xsl:for-each select="Products[count(. | key('groupbyproduct', product)[1]) = 1]">
                <offer sku="{product}">
                    <variations>
                        <mastered-products>
                            <xsl:for-each select="key('groupbyproduct', product)">
                                <mastered-product sku="{sku}" domain="MasterRepository"/>
                            </xsl:for-each>
                        </mastered-products>
                    </variations>
                </offer>
            </xsl:for-each>
        </enfinity>
    </xsl:template>
</xsl:stylesheet>

修复说明

  • 修改xsl:key的match属性值从offer改为Products,匹配源XML中实际需要分组的商品行节点
  • 修改分组遍历的select属性值从offer[count(. | key('groupbyproduct', product)[1]) = 1]改为Products[count(. | key('groupbyproduct', product)[1]) = 1],正确获取每个product值对应的第一个分组节点

修改后即可正常生成每个唯一product对应的父offer节点和variations结构,输出结果和你要求的目标XML完全一致。

内容的提问来源于stack exchange,提问作者tommyhmt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 04:27:04