2013-12-17 33 views
0

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

+0

您使用的是XSLT 1.0还是2.0?我想你可以用一个更简单和更小的XPATH 2.0表达式替换整个。 –

+0

@CarloCannas 1.0不幸的是,没有升级的机会 – Curt

回答

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> 

这不是最好的一段代码,但我认为它仍然可读。让我知道它是否有效。

+0

这使得我的XSL看起来非常混乱,但这就是我认为的XSL :)它比我不得不删除所有换行符好多了,谢谢! – Curt