Xml 即使没有匹配的元素,xsl也会生成输出
即使没有输入元素满足条件,转换xml文件的xsl也会生成输出。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 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>
</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>
</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>
</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>
</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。我试试看。