您能否解释如何将节点的xpath
设置为xslt
变量的值。我还想显示该值,然后将其作为参数传递给JS Function
。感谢您的所有帮助。
答案 0 :(得分:0)
XPath表达式不是值,因此它们不能绑定到变量。您当然可以将XPath表达式放在字符串中。在XSLT中没有标准的方法来执行字符串中保存的XPath表达式,但是许多实现都有一个扩展函数(例如xx:evaluate())来执行它。
它有助于解释您要解决的问题,而不是您尝试使用哪种技术来解决问题。然后我们可以建议替代的,也许更好的方法。
答案 1 :(得分:0)
示例输入XML:
<?xml version="1.0" encoding="utf-8"?>
<root>
<child>
<trial>test</trial>
</child>
</root>
将当前节点的XPath传递给内联JS函数的模型代码:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl" xmlns:js="urn:js">
<xsl:output method="xml" indent="yes"/>
<msxsl:script language="JScript" implements-prefix="js">
<![CDATA[
function test(something)
{
//code here
}
]]>
</msxsl:script>
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="trial">
<xsl:copy>
<xsl:variable name="xpath">
<xsl:for-each select="ancestor-or-self::*">
<xsl:value-of select="name()"/>
<xsl:if test="not(position()=last())">
<xsl:value-of select="'/'"/>
</xsl:if>
</xsl:for-each>
</xsl:variable>
<xsl:apply-templates select="js:test($xpath)"/> <!--Passed value $xpath to funciton test-->
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
返回值为
return (something);
将输出:
<?xml version="1.0" encoding="utf-8"?>
<root>
<child>
<trial>root/child/trial</trial>
</child>
</root>