Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在XSLT中使用动态xpath_Xslt_Xpath - Fatal编程技术网

在XSLT中使用动态xpath

在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

我在XSLT中使用了一个变量,比如xpathvar,它的值将在调用XSLT时提供。我怎样才能做到这一点? 我的XSLT文件看起来像-

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