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>
4

1 回答 1

2

将变量定义为匹配中的第一件事,如下所示:

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

这定义了一个节点集类型的变量$foo。然后像这样访问它

<xsl:for-each select="$foo/campaigns/campaign">
...
</xsl:for-each>
于 2012-05-21T09:52:03.410 回答