Получение ошибки при использовании Javascript в XSL

У меня есть XML-документ, и я создаю другой XML с помощью XSL. Мне нужно проверить некоторые конкретные условия, и для этого я хочу использовать Javascript в своем XSL. Я попробовал, но не смог добиться желаемого результата. Поскольку я не мог часто менять переменные XSL, я пытаюсь использовать Javascript.

XSL-

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:es="http://ucmservice"
    version="1.0" xmlns="http://filenet.com/namespaces/wcm/apps/1.0" xmlns:java="http://xml.apache.org/xalan/java" xmlns:js="urn:custom-javascript" xmlns:lxslt="http://xml.apache.org/xslt"
        xmlns:totalSys="TotalSystem"  extension-element-prefixes="totalSys">

  <lxslt:component prefix="totalSys" functions="checkFirstProp">
  <lxslt:script lang="javascript">

            var firstPropVal = "";
            var secondPropVal = "";
            var completedFirstPropVal= new Array();
            var completedSecondPropVal= new Array();
            var firstDecisionFlag = 0; 
            function checkFirstProp(xmlValue)
            {
                firstDecisionFlag = 0;

                if(firstPropVal.length == 0)
                {
                        firstPropVal = xmlValue;
                        firstDecisionFlag = 1; 
                 }
                 else
                 {
                    if(firstPropVal != xmlValue)
                    {
                         firstPropVal = xmlValue; 
                         firstDecisionFlag = 2; 
                    }
                  }

                  return firstDecisionFlag; 
            }

       </lxslt:script>
    </lxslt:component> 
    <xsl:template match="/">
     <xsl:apply-templates select="XMLTag"/>
    </xsl:template>
    <xsl:template match="XMLTag">        
        <xsl:variable name="firstPropDecisionFlag">
            <xsl:value-of select="totalSys:checkFirstProp(param)"/> 
        </xsl:variable>

        <xsl:if test="$firstPropDecisionFlag=2">
            {
                task
            } 
        </xsl:if>
       </xsl:template>
          bvk</xsl:stylesheet> 

это дало мне сообщение об ошибке -

[20.07.10 16:41:47:106 IST] 0000002e SystemErr R org.apache.xalan.extensions.ObjectFactory$ConfigurationError: поставщик org.apache.bsf.BSFManager не найден

Посоветуйте, где я ошибаюсь?


person user396503    schedule 20.07.2010    source источник


Ответы (2)


Попробуйте заключить код javascript в раздел CDATA.

<script>
<![CDATA[
(function(){
  //...
})();
]]>
</script>
person Dagg Nabbit    schedule 20.07.2010
comment
Я тоже пробовал это ... однако это работает только тогда, когда мне нужно изменить XML на html. в текущей ситуации я пытаюсь преобразовать свой xml в другой требуемый формат xml. - person user396503; 20.07.2010
comment
Попался... так что эти теги lxslt фактически позволяют вам выполнять javascript в XML-документе из таблицы стилей. Довольно круто. Похоже, вам действительно не нужно ничего, кроме простого xsl, чтобы делать то, что вы делаете с javascript, но я ничего не знаю об этих тегах lxslt, поэтому я могу ошибаться. Проверьте ответ скаффмана... - person Dagg Nabbit; 20.07.2010
comment
Я пытался сделать то же самое с простым xsl, однако не смог этого сделать. так как в моем случае мне нужно снова и снова менять значение переменной, в то время как в xsl я должен объявить и определить переменную в одном и том же месте. - person user396503; 21.07.2010

Ошибка говорит о том, что вам нужна Apache Bean Scripting Framework в пути к классам. Вы можете получить его здесь.

person skaffman    schedule 20.07.2010
comment
Спасибо, Skaffman.. нужно было 3 jar-файла, я добавил их, и после этого все заработало. - person user396503; 21.07.2010