xml - 计算具有多个条件的 xml 元素

标签 xml xslt count conditional-statements

我有以下 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>

我想统计setting->type“apartment”是否有“context->floor”。

我试着这样做:

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

但是好像不行。我在尝试将数字转换为 bool 值时遇到异常?有什么建议吗?

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

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

最佳答案

count 中的语句返回不正确的 bool 值。 count() 需要节点集才能对节点进行计数。如果这是相同的设置元素,需要具有具有所需值的 type 和 appartment 元素,那么您可能正在查看:

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

否则,如果您需要具有 type=apartment 或 context=floor 的设置元素的总和(不包括具有两个元素都具有所需值的计数设置),您可能需要:

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

关于xml - 计算具有多个条件的 xml 元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9185275/

相关文章:

php - XML - 转义字符串的正确方法

java - 在 Unity 中使用自定义 list 文件和权限?

xml - 使用 local-name() 获取 XSLT 中的第一个子节点

sql - 如何加快 PostgreSQL 表中的行计数?

java - 随机生成形状

xml - DocBook 5.0 发行版上 docbook.dtd 和 docbook.rng 之间的差异

sql - 如何将另一列的多个值的 tableID 从 XML 读取(分配)到 SQL Server 表中?

svn - 使用 xslt 按 jira 编号对 subversion xml 日志条目进行分组

html - xslt 中的内部链接不起作用

mysql - 使用聚合函数后如何获取计数