XSL转换间距

时间:2009-04-22 18:43:58

标签: xslt whitespace

我正在使用Xsl转换将Xml数据显示为Html。

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
 xmlns:ms="urn:schemas-microsoft-com:xslt"
 xmlns:util="urn:the-xml-files:xslt">
 <xsl:output method="xml" indent="yes"
  omit-xml-declaration="yes" encoding="utf-8"/>

 <xsl:template match="/">
     <xsl:for-each select="/Categories/Category">
       <li class="c">
         <a class="d">
          <xsl:attribute name="id">cat_<xsl:value-of select="categoryid"/></xsl:attribute>
         </a>
       </li>
     </xsl:for-each>
 </xsl:template>
</xsl:stylesheet>

如果li元素的id属性的select不在一行中,则XSL处理器将用空格填充属性值,这完全打破了前端的javascript。

当然,Visual Studio将始终重新格式化多行定义,因此如果我更改某些内容,我需要手动删除空白。

如何从元素中删除不必要的空格?我应该使用xsl:strip-space进行xsl:copy,还是有更好的解决方案? :)

2 个答案:

答案 0 :(得分:4)

解决方案很简单

而不是:

     <a class="d">
      <xsl:attribute name="id">cat_<xsl:value-of select="categoryid"/></xsl:attribute>
     </a>

使用:

     <a class="d" id="cat_{categoryid}"/>

答案 1 :(得分:2)

除了Dimitre优雅的解决方案外,还提供以下详细版本:

<a class="d">
   <xsl:attribute name="id">
      <xsl:text>cat_</xsl:text>
      <xsl:value-of select="categoryid"/>
   </xsl:attribute>
</a>

我只提到这一点,因为<xsl:text>经常被忽视,而且非常有用。无论如何,XSL是一种冗长的语言。