计算满足多个条件的xml元素数量

4

我有以下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">
2个回答

2

count()函数返回的是布尔值,这是不正确的。count()需要接受节点集来计算节点数。如果您需要将类型和公寓元素设置为所需的值,则可能需要查看同一设置元素:

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

否则,如果你需要一个设置元素的总和,其中type=apartment或context=floor(不包括计算具有所需值的两个元素的设置),那么你可能需要:
count(setting[type='apartment'] | setting[context='floor']) &lt; 1

0
如何使用级联谓词呢?像这样:
count(setting[type='apartment'][context='floor']) &lt; 1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接