我正在尝试计算我的转换生成的元素(必须使用XLST1)。例如,我的转换创建:计算在XSLT1中生成的元素
<Parent>
<ElementX Att1="2"/>
<ElementY Att1="1"/>
<ElementZ Att1="6"/>
</Parent>
我需要在同一改造内打印3,因为有3个元素。
可以这样做吗?
谢谢。
我正在尝试计算我的转换生成的元素(必须使用XLST1)。例如,我的转换创建:计算在XSLT1中生成的元素
<Parent>
<ElementX Att1="2"/>
<ElementY Att1="1"/>
<ElementZ Att1="6"/>
</Parent>
我需要在同一改造内打印3,因为有3个元素。
可以这样做吗?
谢谢。
如果您提供了一些XSLT的提取,这将有很大的帮助。 我不给它一个XSLT代码。我将尝试给出一些“方法”来回答:
一种解决方案可能是将输出存储到nodeset(使用提供nodeset()函数的XSLT 1.0扩展)并应用XPath count()函数在这个变量上。之后,只需使用xsl:value-of输出变量,并以相同的方式计算结果。
这里是一个演示如何做到这一点:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:ext="http://exslt.org/common" exclude-result-prefixes="ext">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:template match="/">
<xsl:variable name="vrtfPass1">
<xsl:apply-templates/>
</xsl:variable>
<xsl:value-of select="count(ext:node-set($vrtfPass1)/*/*)"/>
</xsl:template>
<xsl:template match="/*">
<Parent>
<ElementX Att1="2"/>
<ElementY Att1="1"/>
<ElementZ Att1="6"/>
</Parent>
</xsl:template>
</xsl:stylesheet>
当这种转变是在任何XML文档(在此演示没有使用),想要的,正确的结果是产生应用:
3
说明:
处理变换结果(在单个变换中)的一般方法是将它组织成,两次传入,我们将第一次传递的结果保存在变量中。
在第二步中,我们访问结果并执行附加处理。
请注意,在XSLT 1.0中,如果捕获第一遍结果的变量是臭名昭着的RTF(结果树片段)类型,并且需要按照此树中的任何节点的顺序转换为常规树可以访问(xsl:copy-of
和string()
仍然可以在RTF上使用)。
此转换为常规树由扩展函数完成,扩展函数通常具有名称node-set
并始终属于供应商定义的名称空间。在这个演示中,我们使用属于EXSLT命名空间的node-set()
扩展函数 - 因为大多数XSLT 1.0处理器都实现EXSLT。
有关多通道处理的详细信息,请参阅本:Two phase processing: Do not output empty tags from phase-1 XSLT 2.0 processing
那么你的转型是什么样子? – JLRishe 2013-03-20 15:22:24
请修改您的帖子以包含整个模板,并至少包含调用该模板的模板。 – JLRishe 2013-03-20 15:35:13