Премахнете прекъсванията на редовете от 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? Мисля, че можете да замените целия for-each с по-прост и по-малък 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