如何在不关闭XSLT </div>的情况下打印单个<div>

时间:2010-09-13 15:11:50

标签: xslt

基本上我需要在一个if语句中打开一个div,然后在另一个语句中关闭它。我试过了

<xsl:value-of select="'<div>'"/>

但失败了,因为&lt;和&gt;属性中不允许使用。有任何想法吗? 干杯

4 个答案:

答案 0 :(得分:5)

如果您想要做的是输出一些内容,无论条件如何,但根据条件将内容包装在<div>中:

  <xsl:choose>
     <xsl:when test="myConditionIsTrue">
        <div>
           <xsl:call-template name="bar"/>
        </div>
     </xsl:when>
     <xsl:otherwise>
        <xsl:call-template name="bar"/>            
     </xsl:otherwise>
  </xsl:choose>

您可以将<xsl:call-template>更改为<xsl:apply-templates><xsl:value-of select="$myvariable" />等,具体取决于不变内容。

这样,您将树结构视为树结构,利用基于XML树的处理器的强大功能,而不是试图对抗它。 DOE可能在许多情况下工作,但它不可移植,因为XSLT处理器不需要遵守它。实际上他们不能,除非他们碰巧负责特定管道中的序列化。上述方法避免了这个问题。

答案 1 :(得分:3)

这有效:

<xsl:text disable-output-escaping="yes">&lt;div&gt;</xsl:text>

感谢@Alejandro的评论提示

答案 2 :(得分:1)

如果您只是将其打印出来,则可以使用html实体&lt;&gt;代替<>

答案 3 :(得分:0)

这通常是不好的做法,因为您应该始终在同一级别打开和关闭输出的标记。否则,你正在寻找一个潜在的噩梦:“我应该在哪里关闭它?”问题在路上。也就是说,这可能有用:

<xsl:text disable-output-escaping="yes">&lt;div&gt;</xsl:text>

(编辑:忘记添加输出转义)