2

我想做这份工作:

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

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

我想lieferant在 HTML 文件上显示。如果用户单击名称,则应出现警报并穿上preis.

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

 <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>
4

1 回答 1

0

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

因此,在 XSLT 的 JScript 扩展函数中没有可用的功能,您拥有http://msdn.microsoft.com/en-us/library/hbxc2t98%28v=vs.84%29.aspxalert中记录的对象、函数和方法。

举个例子,http://home.arcor.de/martin.honnen/xslt/test2013072701.xml是一个 XML 文档,它引用了一个 XSLT 1.0 样式表,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>
于 2013-07-27T12:18:30.727 回答