查找XSLT1.0代码,它将像下面这样将输入xml(其中项是重复段)转换为预期输出
<root type="array">
<item type="object">
<metadata type="object">
<GTIN type="string">abcd,efwe,sdsf</GTIN>
</metadata>
</item>
<item type="object">
<metadata type="object">
<GTIN type="string">xxx,yyy,zzz</GTIN>
</metadata>
</item>
</root>输出预期XML:
<Assets>
<Asset ID="X.test" UserTypeID="XAsset">
<Values>
<MultiValue AttributeID="GTINList"/>
<value>abcd</value>
<value>efwe</value>
<value>sdsf</value>
</Values>
</Asset>
<Asset ID="X.test" UserTypeID="XAsset">
<Values>
<MultiValue AttributeID="GTINList"/>
<value>xxx</value>
<value>yyy</value>
<value>zzz</value>
</Values>
</Asset>
</Assets>在使用嵌套递归模板之后,使用下面的XSLT,但没有获得预期的输出。
发布于 2022-06-09 14:14:34
以下样式表使用递归模板:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="GTIN">
<Values>
<MultiValue AttributeID="GTINList"/>
<xsl:call-template name="split">
<xsl:with-param name="string" select="concat(.,',')"/>
</xsl:call-template>
</Values>
</xsl:template>
<xsl:template match="metadata">
<Asset ID="X.test" UserTypeID="XAsset">
<xsl:apply-templates/>
</Asset>
</xsl:template>
<xsl:template match="root">
<Assets>
<xsl:apply-templates/>
</Assets>
</xsl:template>
<xsl:template name="split">
<xsl:param name="string"/>
<xsl:if test="$string">
<value>
<xsl:value-of select="substring-before($string,',')"/>
</value>
<xsl:call-template name="split">
<xsl:with-param name="string" select="substring-after($string,',')"/>
</xsl:call-template>
</xsl:if>
</xsl:template>
</xsl:stylesheet>在末尾添加一个额外的逗号,以确保substring-before也找到最后一个GTIN。
https://stackoverflow.com/questions/72561517
复制相似问题