从XSL模板中删除换行符

时间:2013-12-17 15:44:09

标签: xslt line-breaks

我正在寻找一种方法来删除样式表中特定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模板变得不可读?

1 个答案:

答案 0 :(得分:1)

xsl:text元素中包装JAvaScript代码将帮助您获得所需的结果。

<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>

这不是最好的代码,但我认为它仍然可读。如果有效,请告诉我。