我想检查所有孩子是否都设置了属性,如果是,请在fo中添加1个元素:
<row>
<entry attribute="true"></entry>
<entry attribute="true"></entry>
<entry attribute="true"></entry>
</row>
实施例;如果每个entry元素都有attribute = true,那么添加一个元素。
<xsl:template match="row">
<fo:table-row>
<xsl:apply-template/>
</fo:table-row>
<xsl:if test=""><!-- What to write here? -->
<fo:table-row/>
</xsl:if>
</xsl:template>
答案 0 :(得分:6)
count(*[@attribute="true"]) = count(*)
答案 1 :(得分:2)
这可能会更有效率,因为不需要计算所有属性并且评估可以在找到条件@attribute = 'true'
为的第一个子元素时立即停止false()
。
<xsl:if test="not(*[not(@attribute = 'true')])">
<fo:table-row/>
</xsl:if>
<强>解释强>:
这是双重否定规则的另一个应用:
for every $x some property-y is true
相当于:
there isn't any $z in $x such that for $z property-y is not true
答案 2 :(得分:2)
或者,如果您使用的是XPath 2.0,并且希望使代码可读
<xsl:if test="every $a in * satisfies $a/@attribute='true'">
<fo:table-row/>
</xsl:if>
答案 3 :(得分:0)
弗朗西斯说什么或类似的东西
count(*[not(@attribute="true")])