Не удается объединить переменную XSL со строкой JavaScript? - PullRequest
0 голосов
/ 20 июля 2011

Итак, я пытаюсь передать переменную 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)"/>

Где зовут "Джейк".

В этом случае вывод "привет" и ничего больше. Разве это не должно быть "helloJake"?

Но если я попытаюсь:

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

Я получаю «Джейк» в качестве вывода.

Что мне здесь не хватает?

EDIT:

Вот как выглядит 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 голосов
/ 20 июля 2011

Попробуйте установить 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


EDIT

Используйте функцию XPath string, например ::

<xsl:value-of select="js:printString1(string(s:measCollecFile/s:fileHeader/@vendorName))"/>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...