XSL - 检查select是否没有文本节点,然后显示“Not Results”

时间:2018-04-04 08:48:36

标签: testing xslt

如何检查我的阻止/选择是否没有文本节点,然后显示“不是结果”

    <xsl:choose>    
    <xsl:when test="@pass='0' or @pass='1'">
    <fo:block padding-top="1cm" font-weight="bold" margin-bottom="0.2cm">Header</fo:block>                                          <fo:block margin-top="0.2cm" margin-bottom="0.2cm" border-bottom="1px solid #e1e1e1">
</fo:block>
    <fo:block margin-top="0.2cm" margin-bottom="0.2cm" padding-left="5px" padding-right="5px" padding-top="1px">
    <xsl:apply-templates select="detail/katalog/frage[@ko='1' and @passed='0']" />
    <xsl:apply-templates select="detail/katalog/frage/options" />
    <xsl:apply-templates select="detail/katalog/matrix/frage/options" />
    <xsl:apply-templates select="detail/katalog/clusterArea/clusterFrage[@ko='1' and @passed='0']" />
    </fo:block>

我试过这个,但它不起作用。

<xsl:if test="(not(detail/katalog/frage[@ko='1' and @passed='0']) and not(detail/katalog/clusterArea/clusterFrage[@ko='1' and @passed='0']) and not(detail/katalog/frage/options) and not(detail/katalog/matrix/frage/options))">
<fo:block>
Not Results
</fo:block>
 </xsl:if>

非常感谢! PR

1 个答案:

答案 0 :(得分:0)

如果您检查的元素存在,但您当前的检查detail/katalog/frage[@ko='1' and @passed='0']将返回true,因为这只是检查元素本身是否存在,无论它是否具有子节点

所以,你想做这样的事......

not(detail/katalog/frage[@ko='1' and @passed='0']/text())

但是,您还需要注意只有空白的节点,所以您可能需要像这样增加检查...

not(detail/katalog/frage[@ko='1' and @passed='0']/text()[normalize-space()])

或者,您可以使用xsl:strip-space

删除仅空白节点
<xsl:strip-space elements="*" />