2013-08-27 92 views
0

我有以下XML和XSLT轉換爲HTML。如何從XSLT中的JavaScript獲取值?

XML

<?xml version="1.0" encoding="UTF-8"?> 
<root> 
    <te>t1</te> 
</root> 

XSLT

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> 
    <xsl:output method="html" indent="yes" /> 
    <xsl:template match="root"> 
     <html> 
     <div> 
      <xsl:variable name="name1" select="te" /> 
      ** 
      <xsl:value-of select="CtrlList['$name1']" /> 
      ** 
     </div> 
     <script language="javascript">var List={ 
     "t1":"test" 
    }</script> 
     </html> 
    </xsl:template> 
</xsl:stylesheet> 

所以我的目標是從XML獲得 「德」 的價值,並與JavaScript對象 「名單」,並返回其映射在使用XSLT進行轉換時進行值測試。所以我應該得到價值測試作爲輸出。

任何人都可以找出XSLT中的錯誤。

+0

您的'value-of'缺少第二個方括號。它應該是''。 –

+0

對不起..打字錯誤。但仍然面臨同樣的問題。 –

+0

AFAIK Xslt本身不能對一個JSON對象進行處理。看到這裏的一些想法:http://stackoverflow.com/questions/12188064/extracting-information-from-a-json-file-using-xslt-version-1-0 – StuartLC

回答

0

當您查看XSLT時,可能看起來有JavaScript,但所有XSLT都看到它正在輸出名爲「script」的元素,其中包含一些包含文本的「language」屬性。還值得一提的是,的xsl:值-被用來從輸入文檔的價值,但你的腳本元素實際上是結果樹的一部分,所以不XSL訪問:value-of的

但是,可以擴展XSLT,以便它可以使用JavaScript函數,但是這非常依賴於處理器,您應該像在HTML中嵌入JavaScript一樣思考它。看看這個問題,作爲一個例子

How to include javaScript file in xslt

所以,你的情況,你的XSLT會是這樣的(請注意這個特殊的例子只會在Mircorsofts MSXML處理器工作)

<xsl:stylesheet version="1.0" 
     xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
     xmlns:msxsl="urn:schemas-microsoft-com:xslt" 
     xmlns:user="http://mycompany.com/mynamespace" 
     exclude-result-prefixes="msxsl user"> 

    <xsl:output method="xml" indent="yes" /> 

<msxsl:script language="JScript" implements-prefix="user"> 
    var List={ 
    "t1":"test" 
    } 

    function lookup(key) { 
    return List[key]; 
    } 
</msxsl:script> 

<xsl:template match="root"> 
    <html> 
    <div> 
     <xsl:variable name="name1" select="te"/> 
     <xsl:value-of select="user:lookup(string($name1))"/> 
    </div> 
    </html> 
</xsl:template> 
</xsl:stylesheet> 

當然,可能值得問一下爲什麼要在XSLT中使用JavaScript。使用純粹的XSLT可能會達到相同的結果,這肯定會使XSLT更具可移植性。