首页 文章

XSLT for-each计数器 - 如何访问数据

提问于
浏览
1

出于性能测试的目的,我想使用一个小的XML文件并使用XSLT创建一个更大的文件 . 在这里,我计划将原始XML中的每个实体(下面的示例中的Campaign节点)复制并复制n次,只需更改其ID . 我能想到实现这一目标的唯一方法是xsl:for-each选择“1到n” . 但是当我这样做时,我似乎无法再访问实体节点(xsl:for-each select =“campaigns / campaign”在我的情况下不起作用) . 我收到处理器错误:“此处不能使用:上下文项是原子值” . 似乎通过使用“1到n”循环,我失去了对我的实际实体的访问权限 . 是否有任何XPath表达式可以让我访问回来,或者是否有人有完全不同的想法如何实现这一点?

这是我做的:

原始XML

<campaigns>    
<campaign id="1" name="test">
<campaign id="2" name="another name">
</cmpaigns>

我尝试使用XSLT

<xsl:template match="/">
 <xsl:element name="campaigns">
 <xsl:for-each select="1 to 10">
  <xsl:for-each select="campaigns/campaign">
   <xsl:element name="campaign">
   <xsl:copy-of select="@*[local-name() != 'id']" />
   <xsl:attribute name="id"><xsl:value-of select="@id" /></xsl:attribute>
   </xsl:element>
  </xsl:for-each>
 </xsl:for-each>
 </xsl:element>
</xsl:template>

1 回答

  • 2

    将变量定义为匹配中的第一个内容,如下所示:

    <xsl:variable name="foo" select="."/>
    

    这定义了nodeset类型的变量 $foo . 然后像这样访问它

    <xsl:for-each select="$foo/campaigns/campaign">
    ...
    </xsl:for-each>
    

相关问题