将值<xsl:value-of>传递给javascript函数</xsl:value-of>

时间:2013-07-27 11:30:12

标签: javascript xslt

我想做这个工作:

我有一个xml文件,我想用xslt转换为HTML文件。它看起来像这样:

<article id="3526">
    <name>Orange</name>
    <preis stueckpreis="true">15.97</preis>
    <lieferant>Fa.k</lieferant>
  </article>

我想在HTML文件上显示lieferant。如果用户点击该名称,则应显示警报,并将preis

我不知道,如何将preis的值传递给java脚本代码。我尝试编写一个非常简单的代码,只显示带有javascript警报的lieferant,但我不能这样做。你能不能帮我解决这个问题:

 <msxsl:script language="JScript" implements-prefix="user">
          function simfunc(msg)
          {
            alert(msg);
          }
        </xsl:script>
        </head>
      <xsl:for-each select="//artikel">
        <div>
          <p id='p1'  >
            <xsl:value-of select="user:simfunc(lieferant)"/>
          </p>     
        </div>
        <br/>
      </xsl:for-each>

1 个答案:

答案 0 :(得分:0)

您必须了解,虽然某些XSLT处理器(如Microsoft的MSXML)支持使用在XSLT内部的JScript中实现的扩展功能,但您只需访问JScript引擎实现的对象和方法。 alert不是JScript函数,它是在浏览器内部向JScript公开的函数。

因此,对于XSLT,JScript扩展函数中没有alert,您可以使用http://msdn.microsoft.com/en-us/library/hbxc2t98%28v=vs.84%29.aspx中记录的对象,函数和方法。

举个例子,http://home.arcor.de/martin.honnen/xslt/test2013072701.xml是一个引用XSLT 1.0样式表的XML文档,Mozilla使用一些EXSLT扩展函数,而IE使用JScript实现的扩展函数。

样式表http://home.arcor.de/martin.honnen/xslt/test2013072701.xsl如下:

<xsl:stylesheet
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:user="http://example.com/user"
  xmlns:ms="urn:schemas-microsoft-com:xslt"
  xmlns:regexp="http://exslt.org/regular-expressions"
  extension-element-prefixes="ms"
  exclude-result-prefixes="user ms regexp"
  version="1.0">

<xsl:output method="html" version="4.01" encoding="UTF-8"/>

<ms:script language="JScript" implements-prefix="user">
          function simfunc(msg)
          {
            return msg.replace(/^Fa./, '');
          }
</ms:script>

<xsl:template match="/">
  <html lang="de">
    <head>
      <title>Beispiel</title>
    </head>
    <body>
      <h1>Beispiel</h1>

      <xsl:for-each select="//artikel">
        <div>
          <p id="{generate-id()}">
            <xsl:choose>
              <xsl:when test="function-available('regexp:replace')">
                <xsl:value-of select="regexp:replace(lieferant, '^Fa\.', '', '')"/>
              </xsl:when>
              <xsl:when test="function-available('user:simfunc')">
                <xsl:value-of select="user:simfunc(string(lieferant))"/>
              </xsl:when>
              <xsl:otherwise>
                <xsl:value-of select="lieferant"/>
              </xsl:otherwise>
            </xsl:choose>
          </p>     
        </div>
      </xsl:for-each>

    </body>
  </html>
</xsl:template>

</xsl:stylesheet>