XSLT不返回结果

时间:2013-07-02 19:36:35

标签: xslt

我正在使用我没有构建的应用程序。

应用程序需要来自XSLT文件的True/False,排序,如果XSLT返回任何内容为True,如果它返回任何内容则为false。应用程序使用它来决定是否将XML发布到Web服务。

所以我先用

开始
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:template match="/">
  <xsl:choose>
   <xsl:when test="{{if this is true I don't want anything returned}}">

   </xsl:when>
  </xsl:choose>
 </xsl:template>
</xsl:stylesheet>

{我认为这可以解决问题,但我错了它还在回来。 如果我尝试不在那里,应用程序仍然会发布我不想要的XML。}

所以我尝试了

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:template match="/">
  <xsl:choose>
   <xsl:when test="{{if this is true I don't want anything returned}}">
    <xsl:message terminate="yes" />
   </xsl:when>
  </xsl:choose>
 </xsl:template>
</xsl:stylesheet>

它终止了转换,向应用程序发送了一个错误,错误被应用程序捕获并使下一个XML无法通过发布过程。

我需要的是在命令中保持XSLT文件不返回结果。

也许我不完全理解XSLT是如何运作的,我做错了什么。

2 个答案:

答案 0 :(得分:2)

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" />    

 <xsl:template match="/">
  <xsl:choose>
   <xsl:when test="{{if this is true I don't want anything returned}}" />
   <xsl:otherwise>
    <xsl:text>Return something</xsl:text>
   </xsl:otherwise>
  </xsl:choose>
 </xsl:template>
</xsl:stylesheet>

如果测试评估为真,则应该完全没有任何返回。

另一种变体是使用匹配表达特异性:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" />    

 <!-- empty template with a more specific match expression -->
 <xsl:template match="/*[{if this is true I don't want anything returned}]" />

 <xsl:template match="/">
  <xsl:text>Return something</xsl:text>
 </xsl:template>
</xsl:stylesheet>

但是,在此方法中,您只能在匹配表达式中测试输入文档中的节点。变量在匹配表达式中不起作用。

答案 1 :(得分:2)

XSLT样式表的输出始终是符合XPath数据模型的XML文档。这并不意味着它是格式良好的XML;例如,它可以是没有子节点的文档节点(空文档)。这可能是你输出“无”的最接近的。测试此“无”的方式取决于您的调用应用程序。在实践中,我建议输出一个易于您的应用程序测试的“东西”;例如,包含单个空元素<nothing/>的文档。

相关问题