gpt4 book ai didi

xslt - 如何在xsl :apply-templates?中使用XSL变量

转载 作者:行者123 更新时间:2023-12-04 03:46:32 30 4
gpt4 key购买 nike

我对xsl:apply-templates有一个相当复杂的调用:

<xsl:apply-templates select="columnval[@id 
and not(@id='_Name_')
and not(@id='Group')
and not(@id='_Count_')]"/>

该表达式可在其他地方重复使用,如下所示:
<xsl:apply-templates select="someothernode[@id 
and not(@id='_Name_')
and not(@id='Group')
and not(@id='_Count_')]"/>

我想以某种方式将其概括,因此我可以定义一次并在其他地方重用。但是,这似乎不起作用:
<xsl:variable name="x">@id and not(@id='_Name_') and not(@id='Group') and not(@id='_Count_')</xsl:variable>
<xsl:apply-templates select="columnval[$x]"/>
<xsl:apply-templates select="someothernode[$x]"/>

是否有更好/不同的方式来做到这一点?我想要的只是在对xsl:apply-templates的多个不同调用中重用xpath表达式(其中一些是从不同的子代中选择的)。

这将在客户端应用程序中使用,因此很遗憾,我不能使用任何扩展或切换到XSLT 2。 :(

谢谢。

最佳答案

您不能在XSLT中动态地构建XPath(至少不是XSLT 1.0)。但是,您可以使用模板模式轻松完成您要执行的操作:

<xsl:apply-templates select="columnval" mode="filter"/>
<xsl:apply-template select="someothernode" mode="filter"/>

...

<!-- this guarantees that elements that don't match the filter don't get output -->
<xsl:template match="*" mode="filter"/>

<xsl:template match="*[@id and not(@id='_Name_') and not(@id='Group') and not(@id='_Count_')]" mode="filter">
<xsl:apply-templates select="." mode="filtered"/>
</xsl:template>

<xsl:template match="columnval" mode="filtered">
<!-- this will only be applied to the columnval elements that pass the filter -->
</xsl:template>

<xsl:template match="someothernode" mode="filtered">
<!-- this will only be applied to the someothernode elements that pass the filter -->
</xsl:template>

关于xslt - 如何在xsl :apply-templates?中使用XSL变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3884927/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com