使用xsl:if不包括结束标记

时间:2011-02-10 23:41:17

标签: html xslt umbraco

尝试使用以下代码在博客卷中插入Google广告

<xsl:if test="position() = 3">
    <object data="/frontpage_blogroll_center_top_728x90" 
            width="735" 
            height="95"  ></object>
</xsl:if>  

由于某种原因,结束标记</object>不会在HTML中呈现并导致错误。无论如何要解决这个问题吗?

2 个答案:

答案 0 :(得分:4)

之间的XML没有区别(词法除外)
<object></object>

<object/>

这些代表完全相同的XML元素,不同的XSLT处理器可以自由选择上述两种表示中的任何一种。

如果HTML中确实需要长格式的元素,可以通过以下方式实现

  • 使用<xsl:output method="xhtml"/>xhtml方法仅适用于XSLT 2.0。

  • 使用<xsl:output method="html"/>。 XSLT转换的结果将是HTML文档(而不是XML)。

  • 使用技巧,如:

    <object data="/frontpage_blogroll_center_top_728x90" width="735" height="95"  >
      <xsl:value-of select="$vsomeVar"/>
    </object>
    

其中$vsomeVar没有值并且不会导致输出任何内容,但会欺骗XSLT处理器认为输出的东西,从而输出元素的长格式。< / p>

答案 1 :(得分:2)

使用html输出方法。

此样式表:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="html"/>
    <xsl:template match="/">
        <xsl:if test="true()">
            <object data="/frontpage_blogroll_center_top_728x90"
                    width="735"
                    height="95"  ></object>
        </xsl:if>
    </xsl:template>
</xsl:stylesheet>

输出:

<object height="95" 
        width="735" 
        data="/frontpage_blogroll_center_top_728x90"></object>

使用MSXSL,Xalan,Oracle,Saxon,Altova,XQSharp进行测试。