我正在使用 XSL 编写读取 XML 文件的文本输出文件。
在这里,我尝试检查源 XML 中特定内容是否可用,并将该内容写入文件(如果可用)。
但是如果内容不可用(不满足“
所以我想添加一个 else 条件并在该 else 条件下避免在运行时创建 XSL 输出文件。
有人有任何线索吗?
任何机构都可以提供帮助,甚至建议在 Java 代码中采取任何其他方法,即使在创建文件后不删除文件。 [通过阅读它们并识别空文件]
目前我正在使用java读取创建的空文件并显式删除它们。提前致谢。
最佳答案
我将给出两个示例,说明如何做到这一点——第二个是我推荐的:
假设我们有这个 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
偶数元素被“删除”。
执行此操作的一种方法是:
<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>
请注意:对于“不执行任何操作”,您甚至不需要 <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
的模板覆盖身份规则。具有偶数值和空主体的元素——执行“删除”。
请注意:
这里我们根本不使用任何“if-then-else”显式指令——仅使用 Xtemplate 模式匹配,这是 XSLT 最显着的特征。
关于java - 删除运行时生成的 XSL 输出文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10816575/