xml xsl шаблон с html / js внутри не работает - PullRequest
1 голос
/ 27 февраля 2012

Я делаю быстрое обновление для сайта, но xslt - это не мое, и похоже, что он не работает с кодом, который я кодирую, глядя на сгенерированный источник - включили оба ниже:

текущий код:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE xsl:stylesheet [ <!ENTITY nbsp "&#x00A0;"> ]>
<xsl:stylesheet
  version="1.0"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:msxml="urn:schemas-microsoft-com:xslt"
  xmlns:umbraco.library="urn:umbraco.library" xmlns:Exslt.ExsltCommon="urn:Exslt.ExsltCommon" xmlns:Exslt.ExsltDatesAndTimes="urn:Exslt.ExsltDatesAndTimes" xmlns:Exslt.ExsltMath="urn:Exslt.ExsltMath" xmlns:Exslt.ExsltRegularExpressions="urn:Exslt.ExsltRegularExpressions" xmlns:Exslt.ExsltStrings="urn:Exslt.ExsltStrings" xmlns:Exslt.ExsltSets="urn:Exslt.ExsltSets" xmlns:tagsLib="urn:tagsLib"
  exclude-result-prefixes="msxml umbraco.library Exslt.ExsltCommon Exslt.ExsltDatesAndTimes Exslt.ExsltMath Exslt.ExsltRegularExpressions Exslt.ExsltStrings Exslt.ExsltSets tagsLib ">


<xsl:output method="xml" omit-xml-declaration="yes"/>

<xsl:param name="currentPage"/>

<xsl:template match="/">

<xsl:if test="string-length($currentPage/mp4videoLinkId) > 0">
  <xsl:variable name="videoID" select="$currentPage/mp4videoLinkId" />
  <xsl:variable name="srtID" select="$currentPage/mp4videoSRTId" />
  <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
  <script src="flowplayer-3.2.6.min.js"></script>
  <script src="flowplayer.ipad-3.2.2.min.js"></script>

  <!-- player container-->
  <a href="{$videoID}" style="display:block;width:473px;height:310px;" id="ipad"></a>

  <script type="text/javascript">
  $f("ipad", "flowplayer-3.2.7.swf",{
    clip: {
      autoPlay: false,
      url: '{$videoID}',

      // this is the Timed Text file with captions info
      captionUrl: '{$srtID}'
    },
    plugins:  {

      captions: {
        url: 'flowplayer.captions-3.2.3.swf',

        // pointer to a content plugin (see below)
        captionTarget: 'content'
      },

      // configure a content plugin to look good for our purpose
      content: {
        url:'flowplayer.content-3.2.0.swf',
        bottom: 25,
        width: '80%',
        height:40,
        backgroundColor: 'transparent',
        backgroundGradient: 'none',
        borderRadius: 4,
        border: 0,
        textDecoration: 'outline',
        style: {
          body: {
            fontSize: 14,
            fontFamily: 'Arial',
            textAlign: 'center',
            color: '#ffffff'
          }
        }
      }
    }
  }).ipad();
  </script>  
</xsl:if>

</xsl:template>

</xsl:stylesheet>

сгенерированный источник: (как вы видите, он нарушает код и не закрывает, а затем показывает {$ tags}), что мне не хватает?

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js" /><script src="flowplayer-3.2.6.min.js" /><script src="flowplayer.ipad-3.2.2.min.js" /><a href="mp4/assist-mi-car-parking.mp4" style="display:block;width:473px;height:310px;" id="ipad" /><script type="text/javascript">
  $f("ipad", "flowplayer-3.2.7.swf",{
    clip: {
      autoPlay: false,
      url: '{$videoID}',

      // this is the Timed Text file with captions info
      captionUrl: '{$srtID}'
    },
    plugins:  {

      captions: {
        url: 'flowplayer.captions-3.2.3.swf',

        // pointer to a content plugin (see below)
        captionTarget: 'content'
      },

      // configure a content plugin to look good for our purpose
      content: {
        url:'flowplayer.content-3.2.0.swf',
        bottom: 25,
        width: '80%',
        height:40,
        backgroundColor: 'transparent',
        backgroundGradient: 'none',
        borderRadius: 4,
        border: 0,
        textDecoration: 'outline',
        style: { 
          body: { 
            fontSize: 14, 
            fontFamily: 'Arial',
            textAlign: 'center',
            color: '#ffffff'
          } 
        } 
      }
    }
  }).ipad();
  </script>

1 Ответ

0 голосов
/ 27 февраля 2012

Соглашение AVT (шаблон значений атрибутов) в XSLT определено только для значений атрибутов - как ясно видно из названия этой функции.

Выражения внутри фигурных скобок, которые являются частью текстового узла , не оцениваются . Нужно использовать инструкцию <xsl:value-of>.

Решение

Заменить

url: '{$videoID}', 

с

url: '<xsl:value-of select="$videoID"/>', 

Аналогично замените :

  captionUrl: '{$srtID}'   

с

  captionUrl: '<xsl:value-of select="$srtID"/>'   
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...