来源:
<Data>
<value>M1,M2,M3,M4,M5,M6</value>
</Data>
需要将其显示为
输出:
<ABCD>
<value1>M1</value1>
<value2>M2</value2>
<value3>M3</value3>
<value4>M4</value4>
<value5>M5</value5>
<value6>M6</value6>
</ABCD>
XSLT:
我实际上想要根据“,”拆分值,并将它们放在不同的变量中。 使用str-split(),我可以将它加载到不同的变量中。
答案 0 :(得分:3)
此XSLT 1.0转换:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/*">
<ABCD>
<xsl:apply-templates/>
</ABCD>
</xsl:template>
<xsl:template match="value/text()" name="split">
<xsl:param name="pText" select="."/>
<xsl:param name="pOrd" select="1"/>
<xsl:if test="$pText">
<xsl:element name="value{$pOrd}">
<xsl:value-of select=
"substring-before(concat($pText, ','), ',')"/>
</xsl:element>
<xsl:call-template name="split">
<xsl:with-param name="pText" select="substring-after($pText, ',')"/>
<xsl:with-param name="pOrd" select="$pOrd+1"/>
</xsl:call-template>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
应用于提供的XML文档时:
<Data>
<value>M1,M2,M3,M4,M5,M6</value>
</Data>
生成想要的正确结果:
<ABCD>
<value1>M1</value1>
<value2>M2</value2>
<value3>M3</value3>
<value4>M4</value4>
<value5>M5</value5>
<value6>M6</value6>
</ABCD>
<强>解释强>:
递归命名模板,当传递的text-parameter成为空字符串时带有stop-condition。
正确使用 xsl:element
和 AVT 。
正确使用标准XPath函数 substring-before()
和 substring-after
正确使用 sentinel 来简化代码并提高效率。
答案 1 :(得分:0)
如果您有权访问EXSLT,则可以使用str:split()
。
<xsl:apply-templates select='str:split(/Data/value, ",")' />