XLST объединяет мое <script>содержимое в одну строку, в результате комментируя javascript! - PullRequest
0 голосов
/ 13 марта 2011

ОБНОВЛЕНИЕ: Извиняюсь за то, что мой http-сервер убрал пробел из xslt перед отправкой и не знал о комментариях javascript (я действительно должен уточнить вопрос, но не могу).

Мой XSLT выглядит следующим образом:

<?xml version="1.0"?>
<xsl:stylesheet
  version="1.0"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns="http://www.w3.org/1999/xhtml">

<xsl:output
  method="xml"
  indent="yes"/>

<xsl:template match="/root">
<html>
  <head>
    <title>Title</title>
    <script type="text/javascript"><![CDATA[
      // ©2011

      function function(){
        // do stuff...
      }

    ]]></script>
  </head>
  <body>
    <p> blah blah... </p>
  </body>
</html>
</xsl:template>

Но полученный xml всегда сворачивается в одну строку, в результате чего мой javascript закомментирован из начального комментария!Это происходит во всех основных браузерах!Несмотря на отступ = "да" ..

Ответы [ 3 ]

1 голос
/ 13 марта 2011

Я не могу воспроизвести это.

Со всеми следующими девятью процессорами XSLT (включая MSXML3 - так что в IE вы должны получить хороший результат):

  • MSXML (3, 4, 6)
  • .NET (XslCompiledTransform и XslTransform)
  • Альтова (XML-SPY)
  • Saxon 6.5.4
  • Saxon 9.1.07 (процессор XSLT 2.0)
  • XQSharp (процессор XSLT 2.0)

, когда я выполняю предоставленное преобразование XSLT:

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
 xmlns="http://www.w3.org/1999/xhtml">
 <xsl:output   method="xml"   indent="yes"/>

  <xsl:template match="/root">
   <html>
    <head>
     <title>Title</title>
      <script type="text/javascript">
       <![CDATA[
              // ©2011
              function function()
              {
              // do stuff...
              }
         ]]>
      </script>
    </head>
    <body>
     <p> blah blah... </p>
    </body>
   </html>
  </xsl:template>
</xsl:stylesheet>

в этом XML-документе (поскольку в вопросе не указан исходный XML-документ):

<root/>

результатто же самое:

<?xml version="1.0" encoding="utf-8"?>
<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <title>Title</title>
    <script type="text/javascript">

              // ©2011
              function function()
              {
              // do stuff...
              }

      </script>
  </head>
  <body>
    <p> blah blah... </p>
  </body>
</html>

Таким образом, это поведение глючного XSLT-процессора , которого нет в приведенном выше списке - или в вопросе отсутствуют некоторые данные.

1 голос
/ 13 марта 2011

Попробуйте обернуть свой javascript в <xsl:text> - элемент вместо раздела CDATA. Это, по крайней мере, сохранит ваши разрывы строк, которые вы сделали внутри. Я не уверен, заботятся ли сотрудники CDATA о переносе строк.

<script type="text/javascript"><xsl:text>
  // ©2011

  function function(){
    // do stuff...
  }

</xsl:text></script>

Вы также должны попытаться использовать method=html вместо xml, поскольку вы генерируете html-контент.

Кроме того: я думаю, что отступ = да относится только к отступу XML-элементов. Я не думаю, что этот механизм заботится о разделах «Текст» или «CDATA», поэтому вам придется самостоятельно переносить строки (как вы уже делали это в своем javascript).

0 голосов
/ 13 марта 2011

Три вещи, которые нужно попробовать:

  1. Вы генерируете HTML, так зачем использовать метод вывода XML?

  2. CDATA будетиспользоваться синтаксическим анализатором XML при вводе данных для механизма XSLT и не переноситься (CDATA не отображается в информационной модели XML).

  3. Будет ли использоваться xml:space='preserve' в справке по элементу script?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...