Xml 即使没有匹配的元素,xsl也会生成输出

Xml 即使没有匹配的元素,xsl也会生成输出,xml,xslt,Xml,Xslt,即使没有输入元素满足条件,转换xml文件的xsl也会生成输出。xsl文件如下所示 <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="text" encoding="UTF-8"/> <xsl:template ma

即使没有输入元素满足条件,转换xml文件的xsl也会生成输出。xsl文件如下所示

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="text" encoding="UTF-8"/>
    <xsl:template match="Root/Order">
        <xsl:choose>
            <xsl:when test="Order1/task or Order2/task or task">
                <xsl:value-of select="ID"/><xsl:text>|</xsl:text> 
                <xsl:value-of select="cust/custId"/><xsl:text>|</xsl:text> 
                <xsl:value-of select="cust/System"/><xsl:text>|</xsl:text> 
                <xsl:value-of select="cust/Number"/><xsl:text>|</xsl:text> 
                <xsl:value-of select="make/Number"/><xsl:text>|</xsl:text> 
                <xsl:value-of select="make/Status"/><xsl:text>|</xsl:text> 
                <xsl:value-of select="make/Indi"/><xsl:text>|</xsl:text> 
                <xsl:value-of select="make/Code"/><xsl:text>|</xsl:text> 
                <xsl:value-of select="tasks/lno"/><xsl:text>|</xsl:text>
                <xsl:value-of select="tasks/val"/><xsl:text>&#xa;</xsl:text>
            </xsl:when>
            <xsl:otherwise></xsl:otherwise>
        </xsl:choose>
        <xsl:for-each select="task">
                <xsl:value-of select="ID"/><xsl:text>|</xsl:text> 
                <xsl:value-of select="cust/custId"/><xsl:text>|</xsl:text> 
                <xsl:value-of select="cust/System"/><xsl:text>|</xsl:text> 
                <xsl:value-of select="cust/Number"/><xsl:text>|</xsl:text> 
                <xsl:value-of select="make/Number"/><xsl:text>|</xsl:text> 
                <xsl:value-of select="make/Status"/><xsl:text>|</xsl:text> 
                <xsl:value-of select="make/Indi"/><xsl:text>|</xsl:text> 
                <xsl:value-of select="make/Code"/><xsl:text>|</xsl:text> 
                <xsl:value-of select="tasks/lno"/><xsl:text>|</xsl:text>
                <xsl:value-of select="tasks/val"/><xsl:text>&#xa;</xsl:text>
        </xsl:for-each>
        <xsl:for-each select="Order1">
            <xsl:for-each select="task">
                <xsl:value-of select="ID"/><xsl:text>|</xsl:text> 
                <xsl:value-of select="cust/custId"/><xsl:text>|</xsl:text> 
                <xsl:value-of select="cust/System"/><xsl:text>|</xsl:text> 
                <xsl:value-of select="cust/Number"/><xsl:text>|</xsl:text> 
                <xsl:value-of select="make/Number"/><xsl:text>|</xsl:text> 
                <xsl:value-of select="make/Status"/><xsl:text>|</xsl:text> 
                <xsl:value-of select="make/Indi"/><xsl:text>|</xsl:text> 
                <xsl:value-of select="make/Code"/><xsl:text>|</xsl:text> 
                <xsl:value-of select="tasks/lno"/><xsl:text>|</xsl:text>
                <xsl:value-of select="tasks/val"/><xsl:text>&#xa;</xsl:text>
            </xsl:for-each>
        </xsl:for-each>
        <xsl:for-each select="Order2">
            <xsl:for-each select="task">
                <xsl:value-of select="ID"/><xsl:text>|</xsl:text> 
                <xsl:value-of select="cust/custId"/><xsl:text>|</xsl:text> 
                <xsl:value-of select="cust/System"/><xsl:text>|</xsl:text> 
                <xsl:value-of select="cust/Number"/><xsl:text>|</xsl:text> 
                <xsl:value-of select="make/Number"/><xsl:text>|</xsl:text> 
                <xsl:value-of select="make/Status"/><xsl:text>|</xsl:text> 
                <xsl:value-of select="make/Indi"/><xsl:text>|</xsl:text> 
                <xsl:value-of select="make/Code"/><xsl:text>|</xsl:text> 
                <xsl:value-of select="tasks/lno"/><xsl:text>|</xsl:text>
                <xsl:value-of select="tasks/val"/><xsl:text>&#xa;</xsl:text>
            </xsl:for-each>
        </xsl:for-each>
    </xsl:template>
</xsl:stylesheet>
我的理解是,cust与定义的模板不匹配,或者当条件匹配时,不应该有输出。但当我进行转换时,输出如下

<cust>
        <Date>2018-04-16</Date>
        <name>abc</name>
        <code>xyz10</code>
        <custId>abc123</custId>
        <System>main</System>
        <Number>TANK</Number>
    </cust>
2018-04-16
abc
xyz10
abc123
main
TANK
我认为,由于没有为输入定义模板规则,因此在处理过程中会调用内置模板规则并生成输出。我不确定这是否正确的理由。请你回答。提前谢谢

添加此模板:

<xsl:template match="/">
    <xsl:apply-templates select="Root"/>
</xsl:template>

当对上面的输入XML文件运行此操作时,将不会得到任何输出。

添加此模板:

<xsl:template match="/">
    <xsl:apply-templates select="Root"/>
</xsl:template>


当对上面的输入XML文件运行此操作时,将不会得到任何输出。

尝试以下操作:我尝试添加xsl-a)它没有为输入XML文件提供任何输出。b) 当我试图转换另一个包含“task”元素的xml文件时,它也没有给出任何输出。在这两种情况下,它只提供了一个空文件。转换有效的输入文件时,我需要一个输出。请给出建议。试试这个:我试着添加了xsl-a),它没有为输入xml文件提供任何输出。b) 当我试图转换另一个包含“task”元素的xml文件时,它也没有给出任何输出。在这两种情况下,它只提供了一个空文件。转换有效的输入文件时,我需要一个输出。谢谢你的回答,乔。这个添加并没有为给定的输入文件提供输出,但是当我尝试使用xsl转换另一个包含“task”元素的xml文件时,它也不会生成任何输出。请注意,因为XSL模板专门匹配名为
root
的根元素。如果您的XML有一个名为
task
的根元素,那么输出也将为空。很抱歉向您提供错误信息。当我尝试使用根元素为“Order”的xml文件,并且子元素为“cust”和“task”时,我也没有得到任何输出。您提供的上述模板用于覆盖内置模板,对吗?请告知。谢谢。XSLT查找的根元素是
root
而不是
Order
。为了简单起见,除了
root
之外,任何其他具有根元素的输入XML都将有一个空输出。谢谢Joel。我会试试的。谢谢你的回答,乔尔。这个添加并没有为给定的输入文件提供输出,但是当我尝试使用xsl转换另一个包含“task”元素的xml文件时,它也不会生成任何输出。请注意,因为XSL模板专门匹配名为
root
的根元素。如果您的XML有一个名为
task
的根元素,那么输出也将为空。很抱歉向您提供错误信息。当我尝试使用根元素为“Order”的xml文件,并且子元素为“cust”和“task”时,我也没有得到任何输出。您提供的上述模板用于覆盖内置模板,对吗?请告知。谢谢。XSLT查找的根元素是
root
而不是
Order
。为了简单起见,除了
root
之外,任何其他具有根元素的输入XML都将有一个空输出。谢谢Joel。我试试看。