无法使用javascript字符串连接XSL变量?

时间:2011-07-20 11:40:01

标签: javascript xml xslt xpath concatenation

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

这就是我的尝试:

<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)"/>

名称是“Jake”。

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

但如果我尝试:

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

我把“Jake”作为输出。

我在这里缺少什么?

编辑:

这是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>

1 个答案:

答案 0 :(得分:0)

尝试将var设置为str2

    <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))"/>