对具有多个条件的xml元素计数

对具有多个条件的xml元素计数,xml,xslt,count,conditional-statements,Xml,Xslt,Count,Conditional Statements,我有以下XML代码,我正在尝试使用xlst进行转换: <setting> <type>house</type> <context>roof</context> <value>blue</value> </setting> <setting> <type>house</type> <context>kitchen&l

我有以下XML代码,我正在尝试使用xlst进行转换:

<setting>
    <type>house</type>
    <context>roof</context>
    <value>blue</value>
</setting>
<setting>
    <type>house</type>
    <context>kitchen</context>
    <value>red</value>
</setting>
<setting>
    <type>house</type>
    <context>floor</context>
    <value>black</value>
</setting>
<setting>
    <type>apartment</type>
    <context>roof</context>
    <value>red</value>
</setting>

房子
屋顶
蓝色
房子
厨房
红色
房子
地板
黑色
公寓
屋顶
红色
我想计算设置->类型“公寓”是否有“上下文->楼层”

我试图通过以下方式实现这一点:

<xsl:if test="count(setting[type='apartment'] and setting[context='floor']) &lt; 1">
    <!-- do what ever !-->
</xsl:if>

但它似乎不起作用。我在尝试将数字转换为布尔值时遇到了一个例外?有什么建议吗

更新: 我发现我可以使用:

<xsl:if test="count(setting[type='apartment' and context='floor']) &lt; 1">

count中的语句返回的布尔值不正确。count()要求节点集能够对节点进行计数。如果该设置元素与需要具有所需值的type和appartment元素相同,则您可能会看到:

count(setting[type='apartment' and context='floor']) &lt; 1
否则,如果您需要一个类型=公寓或上下文=楼层的设置元素的总和(不包括同时具有两个元素和必需值的计数设置),您可能需要:

count(setting[type='apartment'] | setting[context='floor']) &lt; 1

像这样使用级联谓词怎么样

count(setting[type='apartment'][context='floor']) &lt; 1