Удалить разрывы строк из шаблона XSL

Я ищу способ удалить все разрывы строк в конкретном шаблоне XSL в моей таблице стилей, не во всей таблице стилей, а только в шаблоне.

У меня есть шаблон, который отображает блок кода JSON.

Например, в моей таблице стилей XSLT у меня есть следующее:

<xsl:template match="/">
   <div>Content here..</div>

   <xsl:call-template name="Foo">
      <xsl:with-param name="Bar" select="Bar" />
   </xsl:call-template>

   <div>Content here..</div>
</xsl:template>

<xsl:template name="Foo">
   <xsl:param name="Bar" />
   <script type="text/javascript">
      var json = {
          data:[
             <xsl:for-each select="$Bar">
                 {
                    ID:<xsl:value-of select="@Baz"/>
                 }
                 <xsl:if test="position() != last()">,</xsl:if>
             </xsl:for-each>
          ]
      };
   </script>
</xsl:template>

Это будет выглядеть примерно так:

<div>Content here..</div>

<script type="text/javascript">
   var json = {
      data:[

         {
            ID:1
         }
         ,
         {
            ID:2
         }
         ,
         {
            ID:3
         }

       ]
    };
</script>

<div>Content here..</div>

Я бы предпочел, чтобы это отображалось как:

<div>Content here..</div>

<script type="text/javascript">var json = {data:[{ID:1},{ID:2},{ID:3}]};</script>

<div>Content here..</div>

Возможно ли это, не делая мой XSL-шаблон нечитаемым?


person Curt    schedule 17.12.2013    source источник
comment
Вы используете XSLT 1.0 или 2.0? Я думаю, вы можете заменить все для каждого более простым и меньшим выражением XPATH 2.0.   -  person Carlo Cannas    schedule 17.12.2013
comment
@CarloCannas 1.0, к сожалению, и нет возможности обновиться   -  person Curt    schedule 17.12.2013


Ответы (1)


Оборачивая код JAvaScript в xsl:text элементов, вы сможете добиться желаемого результата.

<script type="text/javascript">
    <xsl:text>var json = {data:[</xsl:text>
    <xsl:for-each select="$Bar">
        <xsl:text>{ID:</xsl:text>
        <xsl:value-of select="@Baz"/>
        <xsl:text>}</xsl:text>
        <xsl:if test="position() != last()">,</xsl:if>
    </xsl:for-each>
    <xsl:text>]};</xsl:text>
</script>

Это не самый красивый фрагмент кода, но я думаю, что он все еще читаем. Дайте мне знать, если это работает.

person Carlo Cannas    schedule 17.12.2013
comment
Из-за этого мой XSL выглядит действительно загроможденным, но я думаю, это XSL для вас :) это намного лучше, чем удалять все мои разрывы строк, спасибо! - person Curt; 17.12.2013