在XSLT中使用动态xpath
我在XSLT中使用了一个变量,比如xpathvar,它的值将在调用XSLT时提供。我怎样才能做到这一点? 我的XSLT文件看起来像-在XSLT中使用动态xpath,xslt,xpath,Xslt,Xpath,我在XSLT中使用了一个变量,比如xpathvar,它的值将在调用XSLT时提供。我怎样才能做到这一点? 我的XSLT文件看起来像- <xsl:param name="xpathvar"/> <xsl:param name="keyxpath"/> <xsl:template match="/"> <listofResults> <xsl:for-each select="$xpathvar"> <keyva
<xsl:param name="xpathvar"/>
<xsl:param name="keyxpath"/>
<xsl:template match="/">
<listofResults>
<xsl:for-each select="$xpathvar">
<keyvalues><xsl:value-of select="xalan:evaluate(substring-before($keyxpath,'||'))"/></keyvalues>
<keyvalues><xsl:value-of select="xalan:evaluate(substring-after($keyxpath,'||'))"/></keyvalues>
</xsl:for-each>
</listofResults>
</xsl:template>
</xsl:stylesheet>
如果我在for each中提到变量,它会抛出错误。请指导我如何做到这一点
谢谢 我不认为可以这样做,因为您必须使用xpath,所以示例如下
<template match="Node[name=$xpathvar]" />
<xsl:for-each select="*[name()=$xpathvar]">
</xsl:for-each>
我认为它不允许您直接使用变量,因为它不是节点集
如果我在
对于每种情况,它都会抛出错误
在XSLT1.0中(看起来您正在使用Xalan),您只能迭代节点集。因此,$xpathvar
应该是节点集数据类型的实例
在XSLT2.0中,可以迭代序列(包括标量值)
另外,如果包含“动态”XPath表达式的字符串足够简单(只有QName测试步骤,可能是位置谓词),那么这可以用标准XSLT来完成(正如SO中已经回答的那样)。根据这一点,不能纯粹用普通的旧XSLT来完成,您需要使用评估扩展,请参见:我不会给出这么强的答案。看看这个XPath子集的“walker”模板实现:如果我应用它,它不会识别变量的XPath。我的XML是永久性的361686 RATS ASE 17-DEC-80 800 361687 RATS ASE 17-DEC-80 800,应用上述内容后的输出是永久性的361686 RATS ASE 17-DEC-80 800 361687 RATS ASE 17-DEC-80 800请提供完整的源XML文档(但尽可能少)并描述所需的输出结果——根据这一点,可以使用纯XSLT1.0。