在运行时删除XSL输出文件生成

时间:2012-05-30 12:44:04

标签: java exception xslt runtime

我正在编写使用XSL读取XML文件的文本输出文件。

在这里,我尝试检查源XML中可用的特定内容的天气,并将该内容写入文件(如果可用)。

但是如果内容不可用(不满足“< XSL:if>”条件),那么输出文件将是一个空文件。

所以我想添加一个else条件,并在那个条件下,以避免在运行时创建XSL输出文件。

任何身体都有任何线索?

< xsl:message terminate =“yes”>不会有帮助,因为它确实生成了输出,但只是终止了对XSL的进一步处理。

即使没有在创建文件后删除文件,任何正文都可以帮助甚至建议在java代码中采用任何其他方法。 [通过阅读和识别空文件]

目前我正在使用java来读取创建的空文件并明确删除它们。谢谢你。

1 个答案:

答案 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最显着的特征。