2013-07-27 64 views
2

我要做好這項工作:傳遞的值的<xsl:value-of的>到Java腳本函數

我有一個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腳本代碼。我試圖寫一個非常簡單的代碼,只顯示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> 

回答

0

你必須明白的是,雖然像微軟的MSXML一些XSLT處理器支持使用JScript中實現XSLT的內部擴展功能,你只需訪問對象和方法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> 
+0

你好,感謝您的完整的答案。據我瞭解,在XSL文件中添加''然後調用這個java腳本函數或傳遞一個值是否正確? – TangoStar

+1

''是你如何在HTML或SVG中使用腳本。如果您的XSLT生成HTML或SVG,您當然可以在生成的HTML或SVG中使用腳本。如果你想在XSLT代碼本身中使用腳本,那麼一些XSLT處理器支持它,在瀏覽器世界中,IE使用MSXML作爲XSLT處理器,並支持使用JScript或VBScript,這是我在示例中顯示的方式(用於JScript)。但是您可以訪問腳本引擎實現並提供的對象和功能。 'alert'是瀏覽器公開的功能,而不是腳本引擎,因此您無法訪問它。 –

相關問題