任何使用XSLT的人都可以帮助我吗?
我使用的是XSL 1.0版。
我在XSL文件中声明了一个参数,如:
<xsl:param name="HDISageHelpPath"/>
现在我从asp页面为此参数赋值。我指定的值是"document('../ChannelData/Sage/help/ic/xml/HDI.xml')/HelpFiles/Help"
。现在我想将此参数分配给<xsl for each>
,如
<xsl:for-each select="msxsl:node-set($HDISageHelpPath)" >
(这不起作用)
但它不起作用。我通过调试它来检查参数值,如下所示
<debug tree="$HDISageHelpPath">
<xsl:copy-of select="$HDISageHelpPath"/>
</debug>
我可以打印该值,看起来是正确的。事实上,当我通过硬编码分配静态路径("document('../ChannelData/Sage/help/ic/xml/HDI.xml')/HelpFiles/Help"
)时,它可以正常工作
<xsl:for-each select="document('../ChannelData/Sage/help/ic/xml/HDI.xml')/HelpFiles/Help"> (This works)
任何人都可以告诉我为什么将参数分配给xsl:for-each
不起作用?
答案 0 :(得分:0)
您无法在XSLT 1.0中轻松地将动态字符串评估为XPath表达式。它们通常必须是硬编码的。
有EXSLT's dyn:evaluate()
,但我怀疑你可以在MXSML处理器上使用它。
作为替代方法,您可以尝试仅传递文件路径:
<xsl:param name="HDISageHelpFilePath"/>
<!-- ... -->
<xsl:for-each select="document($HDISageHelpFilePath)/HelpFiles/Help">
</xsl:for-each>
或制作占位符,在将实际的XSL代码加载到处理器(作为字符串)之前将其替换为搜索和替换。这有点混乱且容易出错,但它可以让您使用实际的动态XPath表达式。
<xsl:for-each select="%HELP_FILE_XPATH%">
</xsl:for-each>
将文件加载为文本,将%HELP_FILE_XPATH%
替换为实际的XPath,将其提供给处理器。如果它加载,你很好,如果没有,你的输入XPath格式不正确。