2011-07-20 23 views
0

所以我试图将一个XSL变量传递给一个js函数,然后用一个字符串连接它,但它不起作用。无法用JavaScript字符串连接XSL变量?

这是我的尝试:

<msxsl:script language="JavaScript" implements-prefix="js"> 
<![CDATA[ 
    function printString1(str) 
    { 
    str2 = 'hello' + str; 
    return str2; 
    } 
]]> 
</msxsl:script> 

这是我如何调用该方法:

<xsl:value-of select="js:printString1(s:somepath/@name)"/> 

凡的名字是 “杰克”。

在这种情况下,输出是“你好”,没有别的。它不应该是“helloJake”吗?

但如果我尝试:

<msxsl:script language="JavaScript" implements-prefix="js"> 
<![CDATA[ 
    function printString1(str) 
    { 
    return str; 
    } 
]]> 
</msxsl:script> 

我得到 “杰克” 作为输出。

我在这里错过了什么?

编辑:

这是XML文件的外观:

<?xml version="1.0" encoding="UTF-8"?> 
<?xml-stylesheet type="text/xsl" href="MeasDataStylesheetWithScript2.xsl"?> 

<measCollecFile 
xmlns="http://www.3gpp.org/ftp/specs/archive/32_series/32.435#measCollec" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="measCollec"> 
    <fileHeader vendorName="samplename"> 
</fileHeader> 
</measCollecFile> 

这是XSL文件看看如何:

<?xml version="1.0" encoding="UTF-8"?> 

<xsl:stylesheet version="2.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns:s="http://www.3gpp.org/ftp/specs/archive/32_series/32.435#measCollec" 
xmlns:msxsl="urn:schemas-microsoft-com:xslt" 
xmlns:js="urn:custom-javascript" 
exclude-result-prefixes="s msxsl js"> 

<msxsl:script language="javascript" implements-prefix="js"> 
    <![CDATA[ 
     function printString1(str) 
     { 
     var str2 = 'hello' + str; 
     return str2; 
     } 
    ]]> 
</msxsl:script> 

<xsl:template match="/"> 
    <html> 
    <body> 

    <xsl:value-of select="js:printString1(s:measCollecFile/s:fileHeader/@vendorName)"/> 

    </body> 
    </html> 

</xsl:template> 
</xsl:stylesheet> 

回答

0

尽量设置varstr2

<msxsl:script language="JScript" implements-prefix="js"> 
     <![CDATA[ 
    function printString1(str) 
    { 
var str2 = 'hello' + str; 
return str2; 
    } 
]]> 
    </msxsl:script> 

我尝试下面的模板:

<?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="js" 
> 
    <xsl:output method="xml" indent="yes"/> 

    <msxsl:script language="JScript" implements-prefix="js"> 
     <![CDATA[ 
    function printString1(str) 
    { 
var str2 = 'hello' + str; 
return str2; 
    } 
]]> 
    </msxsl:script> 

    <xsl:template match="/"> 
     <xsl:value-of select="js:printString1('Jake')"/> 
    </xsl:template> 
</xsl:stylesheet> 

输出:helloJake


编辑

使用XPath string功能,如:

<xsl:value-of select="js:printString1(string(s:measCollecFile/s:fileHeader/@vendorName))"/> 
+0

只是尝试,它不工作。你还有其他建议吗? – Simon

+0

@Simon,我更新了我的答案。 –

+0

我已经包含了源文件的外观。虽然你正确地传递像'jake'这样的字符串会起作用,但从xml文件中提取字符串不会。 – Simon