即使没有输入元素满足条件,转换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>
</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>
输入xml文件如下。
<cust>
<Date>2018-04-16</Date>
<name>abc</name>
<code>xyz10</code>
<custId>abc123</custId>
<System>main</System>
<Number>TANK</Number>
</cust>
我的理解是,由于cust与定义的模板匹配不匹配,或者在条件时,不应该有输出。但是当我这样做时,转换输出如下所示。
2018-04-16
abc
xyz10
abc123
main
TANK
我相信由于输入没有定义的模板规则,因此在处理过程中调用内置模板规则并生成输出。我不确定这是否是正确的理由。请求你的答案。提前致谢。
答案 0 :(得分:2)
添加此模板:
<xsl:template match="/">
<xsl:apply-templates select="Root"/>
</xsl:template>
如果对上面的输入XML文件运行,则不会输出。