我正在编写使用XSL读取XML文件的文本输出文件。
在这里,我尝试检查源XML中可用的特定内容的天气,并将该内容写入文件(如果可用)。
但是如果内容不可用(不满足“< XSL:if>”条件),那么输出文件将是一个空文件。
所以我想添加一个else条件,并在那个条件下,以避免在运行时创建XSL输出文件。
任何身体都有任何线索?
< xsl:message terminate =“yes”>不会有帮助,因为它确实生成了输出,但只是终止了对XSL的进一步处理。
即使没有在创建文件后删除文件,任何正文都可以帮助甚至建议在java代码中采用任何其他方法。 [通过阅读和识别空文件]
目前我正在使用java来读取创建的空文件并明确删除它们。谢谢你。
答案 0 :(得分:1)
我将举两个例子说明如何做到这一点 - 第二个是我的建议:
假设我们有这个XML文档:
<nums>
<num>01</num>
<num>02</num>
<num>03</num>
<num>04</num>
<num>05</num>
<num>06</num>
<num>07</num>
<num>08</num>
<num>09</num>
<num>10</num>
</nums>
我们希望从中生成另一个元素,其中带有偶数的num
元素被删除&#34;
执行此操作的一种方法是:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/*">
<nums>
<xsl:apply-templates/>
</nums>
</xsl:template>
<xsl:template match="num">
<xsl:choose>
<xsl:when test=". mod 2 = 1">
<num><xsl:value-of select="."/></num>
</xsl:when>
<!-- <xsl:otherwise/> -->
</xsl:choose>
</xsl:template>
</xsl:stylesheet>
生成了想要的结果:
<nums>
<num>01</num>
<num>03</num>
<num>05</num>
<num>07</num>
<num>09</num>
</nums>
请注意:对于&#34;没有做任何事情&#34;你甚至不需要<xsl:otherwise>
而且它被注释掉了。
更好的解决方案:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="num[. mod 2 = 0]"/>
</xsl:stylesheet>
这会产生相同的正确结果。
在这里,我们用匹配num
元素的模板覆盖身份规则,该元素具有偶数值和空体 - 这样做&#34;删除&#34;。
请注意:
我们不会使用任何&#34; if-then-else&#34;显式指令 - 只是Xtemplate模式匹配,这是XSLT最显着的特征。