Muenchian分组应用后产品层级variation块未在XML转换结果中生成
问题原因
你的XSLT代码的键匹配规则和分组路径和源XML结构不匹配:
- 你定义的
<xsl:key name="groupbyproduct" match="offer" use="product"/>中match="offer"是完全错误的,源XML中不存在名为offer的节点,实际需要分组的是根节点下的Products节点 - 后续分组遍历用的
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
相关产品推荐
相关产品推荐

