为了进行性能测试,我想使用XSLT获取一个小的XML文件并从中创建一个更大的文件。在这里,我计划将原始XML中的每个实体(下面的示例中的Campaign节点)复制并复制n次,只需更改其ID。 我能想到实现这一目标的唯一方法是xsl:for-each select" 1到n"。但是当我这样做时,我似乎无法再访问实体节点(xsl:for-each select =" campaign / 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>
答案 0 :(得分:2)
将变量定义为匹配中的第一个变量,如下所示:
<xsl:variable name="foo" select="."/>
这定义了nodeset类型的变量$foo
。然后像这样访问它
<xsl:for-each select="$foo/campaigns/campaign">
...
</xsl:for-each>