0

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

4

2 回答 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 回答