您能否解释如何将xpath
节点设置为xslt
变量的值。我还想显示该值,然后将其作为参数传递给JS Function
. 感谢你的帮助。
问问题
795 次
2 回答
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>
于 2013-01-26T10:22:00.027 回答
0
XPath 表达式不是值,因此它们不能绑定到变量。您当然可以将 XPath 表达式放入字符串中。XSLT 中没有标准方法来执行保存在字符串中的 XPath 表达式,但许多实现都有一个扩展函数(例如 xx:evaluate())来执行此操作。
它有助于解释你试图解决什么问题,而不是你试图使用什么技术来解决它。然后我们可以提出替代方案,也许是更好的方法。
于 2013-01-26T09:38:21.780 回答