XSLT样式表需要空的成对标记,而不是空值的自动关闭标记

XSLT样式表需要空的成对标记,而不是空值的自动关闭标记,xslt,Xslt,我的输入有时有价值,有时没有价值。如value1=ABC或value1=“” 在xsl转换过程中,我的代码如下所示 <element name="test"><xsl:value-of select="$value1"/><element> 当值存在时,上述代码的输出为 <element name="test">ABC</element> ABC 当该值不存在时,输出为 <element name="test"/>

我的输入有时有价值,有时没有价值。如value1=ABC或value1=“”

在xsl转换过程中,我的代码如下所示

<element name="test"><xsl:value-of select="$value1"/><element>

当值存在时,上述代码的输出为

<element name="test">ABC</element>
ABC
当该值不存在时,输出为

<element name="test"/>

现在,我想让它看起来像

<element name="test"></element>

而不是

<element name="test"/>

是否有可能获得所需的输出? 如果是,那么如何操作?

尝试添加

例如

XSLT1.0

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="html"/>
    <xsl:strip-space elements="*"/>

    <xsl:template match="/">
        <xsl:variable name="test1"/>
        <xsl:variable name="test2" select="'value'"/>
        <element name="test1"><xsl:value-of select="$test1"/></element>
        <element name="test2"><xsl:value-of select="$test2"/></element>
    </xsl:template>

</xsl:stylesheet>

生成(应用于任何XML实例时):


价值

@SAM-这只会在少数情况下导致问题(例如,如果您的任何元素名称与HTML元素相同,或者您正在输出处理指令)。有关更多详细信息,请参阅。在这个线程()中,Michael Kay给出了一个有趣的答案:“XSLT输出一个结果树,而不是输出标记[…],序列化程序将决定是否使用或。在XML中,这两种形式完全相同,因此XML的任何使用者都将接受[…]在这种情况下,官方的答案是编写自己的序列化程序。”
<element name="test1"></element>
<element name="test2">value</element>