我正在使用我没有构建的应用程序。
应用程序需要来自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是如何运作的,我做错了什么。
答案 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/>
的文档。