我使用XSLT 1.0从SQL返回信息:
<xsl:if test="../Field[@Name='TheDBFieldName'][.!='']">
<xsl:element namespace="http://BlahBlah" name="TheResult">
<xsl:value-of select="../Field[@Name='TheDbFieldName']" />
</xsl:element>
</xsl:if>
我的当前结果如下所示:
1,2,3,6-
我需要像这样返回:
<TheDBFieldName>
<TheResult>
<Result>1</Result>
</TheResult>
<TheResult>
<Result>2</Result>
</TheResult>
<TheResult>
<Result>3</Result>
</TheResult>
<TheResult>
<Result>6</Result>
</TheResult>
</TheDBFieldName>
不幸的是XSLT 2.0不是我的选择
对此有任何帮助,包括使用我的信息的例子,我们将不胜感激!我一直无法将当前示例应用于我的示例,主要是因为我使用SQL数据而不是吸收XML文件
答案 0 :(得分:0)
您可以在递归模板调用中使用substring-before()
和substring-after()
。
示例...
XML输入
<Field Name="TheDBFieldName">1,2,3,6</Field>
XSLT 1.0
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="Field">
<xsl:element name="{@Name}">
<xsl:call-template name="tokenize">
<xsl:with-param name="input" select="."/>
</xsl:call-template>
</xsl:element>
</xsl:template>
<xsl:template name="tokenize">
<xsl:param name="input"/>
<xsl:variable name="remaining" select="substring-after($input,',')"/>
<TheResult>
<Result>
<xsl:value-of select="normalize-space(substring-before(concat($input,','),','))"/>
</Result>
</TheResult>
<xsl:if test="$remaining">
<xsl:call-template name="tokenize">
<xsl:with-param name="input" select="$remaining"/>
</xsl:call-template>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
<强>输出强>
<TheDBFieldName>
<TheResult>
<Result>1</Result>
</TheResult>
<TheResult>
<Result>2</Result>
</TheResult>
<TheResult>
<Result>3</Result>
</TheResult>
<TheResult>
<Result>6</Result>
</TheResult>
</TheDBFieldName>
要适应您的样式表,请添加tokenize
模板并更改:
<xsl:value-of select="../Field[@Name='TheDbFieldName']" />
为:
<xsl:call-template name="tokenize">
<xsl:with-param name="input" select="../Field[@Name='TheDbFieldName']"/>
</xsl:call-template>