以XML输入:
<root>
<article>
test1,test2,test3 </article>
</root>
现在需要XSLT逻辑来生成输出XML
<article>test1</article>
<article>test2</article>
<article>test3</article>
答案 0 :(得分:1)
通常,您需要tokenize
的内容article
,并在XSLT 3中使用article
为每个令牌创建一个新的xsl:element
元素实现该目标的方法是
<xsl:template match="article">
<xsl:apply-templates select="tokenize(., ',')">
<xsl:with-param name="element-name" select="node-name()"/>
</xsl:apply-templates>
</xsl:template>
<xsl:template match=".[. instance of xs:string]">
<xsl:param name="element-name"/>
<xsl:element name="{$element-name}">{.}</xsl:element>
</xsl:template>
需要最少但完整的样本
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
exclude-result-prefixes="xs"
expand-text="yes"
version="3.0">
<xsl:mode on-no-match="shallow-copy"/>
<xsl:output indent="yes"/>
<xsl:template match="article">
<xsl:apply-templates select="tokenize(., ',')">
<xsl:with-param name="element-name" select="node-name()"/>
</xsl:apply-templates>
</xsl:template>
<xsl:template match=".[. instance of xs:string]">
<xsl:param name="element-name"/>
<xsl:element name="{$element-name}">{.}</xsl:element>
</xsl:template>
</xsl:stylesheet>