2

我正在使用 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,还是有更好的解决方案?:)

4

2 回答 2

4

解决方案很简单

代替:

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

采用:

     <a class="d" id="cat_{categoryid}"/>
于 2009-04-22T19:04:11.307 回答
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 是一种冗长的语言。

于 2009-04-22T19:12:50.337 回答