使用XSLT 1.0转换XML 拆分|分隔的多图片链接为单独字段
XSLT 1.0 拆分竖线分隔图片链接实现方案
实现逻辑
XSLT 1.0 无内置字符串拆分函数,通过递归模板实现竖线分隔符的字符串拆分,同时保留其他原有节点不变。
完整XSLT代码
<?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <!-- 身份模板:复制所有不需要修改的节点和属性 --> <xsl:template match="@*|node()"> <xsl:copy> <xsl:apply-templates select="@*|node()"/> </xsl:copy> </xsl:template> <!-- 匹配ImageURL节点,调用拆分模板 --> <xsl:template match="ImageURL"> <xsl:call-template name="splitImageURL"> <xsl:with-param name="urlStr" select="."/> <xsl:with-param name="index" select="1"/> </xsl:call-template> </xsl:template> <!-- 递归拆分模板:按|拆分字符串,生成带序号的ImageURL节点 --> <xsl:template name="splitImageURL"> <xsl:param name="urlStr"/> <xsl:param name="index"/> <xsl:choose> <xsl:when test="contains($urlStr, '|')"> <xsl:element name="ImageURL{$index}"> <xsl:value-of select="substring-before($urlStr, '|')"/> </xsl:element> <xsl:call-template name="splitImageURL"> <xsl:with-param name="urlStr" select="substring-after($urlStr, '|')"/> <xsl:with-param name="index" select="$index + 1"/> </xsl:call-template> </xsl:when> <xsl:otherwise> <xsl:element name="ImageURL{$index}"> <xsl:value-of select="$urlStr"/> </xsl:element> </xsl:otherwise> </xsl:choose> </xsl:template> </xsl:stylesheet>
效果说明
- 原始XML中
SKU、data、post等节点会原封不动保留 ImageURL节点内的链接按|拆分后,会依次生成ImageURL1、ImageURL2... 对应每个拆分后的链接- 注:你提供的预期输出中存在5个ImageURL节点,而原始XML中仅包含4个拆分后的链接,若需要额外补全节点,可在递归逻辑末尾按需追加固定节点即可。
内容的提问来源于stack exchange,提问作者Tom Arm
相关产品推荐
相关产品推荐

