对XSLT1中生成的元素进行计数

对XSLT1中生成的元素进行计数,xslt,xslt-1.0,Xslt,Xslt 1.0,我试图计算转换生成的元素(必须使用XLST1)。例如,我的转换创建: <Parent> <ElementX Att1="2"/> <ElementY Att1="1"/> <ElementZ Att1="6"/> </Parent> 我需要在相同的转换中打印3,因为有3个子元素 这能做到吗 谢谢。如果您提供XSLT的一些摘录,会有很大帮助。 没有它,我不能给你XSLT代码。我将试着给出一些答案: 一种解决方案是将输出存

我试图计算转换生成的元素(必须使用XLST1)。例如,我的转换创建:

<Parent>
  <ElementX Att1="2"/>
  <ElementY Att1="1"/>
  <ElementZ Att1="6"/>
</Parent>

我需要在相同的转换中打印3,因为有3个子元素

这能做到吗


谢谢。

如果您提供XSLT的一些摘录,会有很大帮助。 没有它,我不能给你XSLT代码。我将试着给出一些答案:


一种解决方案是将输出存储到节点集(使用XSLT1.0扩展,它提供了nodeset()函数),并对该变量应用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>
说明

<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>
处理转换结果(在单个转换中)的一般方法是将其组织在两个过程中,并将第一个过程的结果保存在变量中

在第二个过程中,我们访问结果并进行附加处理

请注意,在XSLT 1.0中,如果捕获第一次传递结果的变量是臭名昭著的RTF(结果树片段)类型,并且需要将其转换为常规树,以便可以访问该树中的任何节点(
xsl:copy of
string()
仍然允许在RTF上使用)

这种到常规树的转换由扩展函数完成,扩展函数通常具有名称
节点集
,并且始终属于供应商定义的命名空间。在本演示中,我们使用的是属于EXSLT名称空间的
node-set()
扩展函数,因为大多数XSLT1.0处理器都实现EXSLT


有关多过程处理的更多信息,请参见此

以及您的转换是什么样子的?请编辑您的帖子,以包含整个模板,至少包括调用该模板的模板。