将xpath设置为xslt变量的值,并将其作为参数传递给JS函数

时间:2013-01-26 05:31:49

标签: variables xslt

您能否解释如何将节点的xpath设置为xslt变量的值。我还想显示该值,然后将其作为参数传递给JS Function。感谢您的所有帮助。

2 个答案:

答案 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>