Xml XSLT在每个选择中使用变量

Xml XSLT在每个选择中使用变量,xml,xslt,Xml,Xslt,我试图为每个select提供一个动态名称,但似乎无法使其工作 我的模板旨在允许传入特定的标记名,然后从xml中选择这些节点并用于处理 <xsl:param name="tagName" select="'DefaultTag'" /> <xsl:variable name="DataSource" select="document('../xml/datasource.xml')"/> <xsl:template name="ProcessData">

我试图为每个select提供一个动态名称,但似乎无法使其工作

我的模板旨在允许传入特定的标记名,然后从xml中选择这些节点并用于处理

<xsl:param name="tagName" select="'DefaultTag'" />

<xsl:variable name="DataSource" select="document('../xml/datasource.xml')"/>

<xsl:template name="ProcessData">
    <xsl:for-each select="$DataSource//$tagName/DataValue" >

        ... Data operations here ...

    </xsl:for-each>
</xsl:template>

... 这里的数据操作。。。
如果我用硬编码的值替换for each select中的$tagName,则该值有效

如何使用param值进行变量替换

谢谢,
-Dennis

您不能在xpath中使用这样的变量来生成“动态”表达式,但在这种情况下,变量部分只是一个元素名,因此您可以使用谓词进行过滤:

$DataSource//*[local-name() = $tagName]/DataValue

您不能在xpath中使用这样的变量来生成“动态”表达式,但在这种情况下,变量部分只是一个元素名,因此您可以使用谓词进行筛选:

$DataSource//*[local-name() = $tagName]/DataValue

如果只删除
DefaultTag
周围的单引号,会发生什么?否则,请发布完整的XSLT样式表,以便人们可以测试自己。您如何设置参数?如果您只是删除
DefaultTag
周围的单引号,会发生什么?否则,请发布完整的XSLT样式表,以便人们可以测试自己。您如何设置参数?太好了!就这样。我知道一定有办法。。。谢谢@Dennisbutty请接受这个答案(在左边打勾,使其显示为绿色)。这是Stackoverflow的常见做法。完美!就这样。我知道一定有办法。。。谢谢@Dennisbutty请接受这个答案(在左边打勾,使其显示为绿色)。这是Stackoverflow的常见做法。