基于条件的XSL计数

时间:2020-06-04 22:24:37

标签: xml xslt xpath xslt-1.0

我具有类似于以下内容的XML数据:

<?xml version="1.0" encoding="utf-8"?>
<Database>
    <ResultsStore>
        <Result Type="A">
            <Info Value="3" />
        </Result>
        <Result Type="B">
            <Info Value="0" />
        </Result>
        <Result Type="C">
            <Info Value="1" />
        </Result>
    </ResultsStore>

    <ResultsStore>
        <Result Type="A">
            <Info Value="3" />
        </Result>
        <Result Type="B">
            <Info Value="0" />
        </Result>
        <Result Type="C">
            <Info Value="0" />
        </Result>
    </ResultsStore>

    <ResultsStore>
        <Result Type="A">
            <Info Value="3" />
        </Result>
        <Result Type="B">
            <Info Value="1" />
        </Result>
        <Result Type="C">
            <Info Value="1" />
        </Result>
    </ResultsStore>

    <!-- etc. -->
</Database>

我需要计算具有非零信息值的结果B或结果C的结果存储的数量。在上面的代码示例中,三个ResultsStores的计数应为2。

我编写了以下代码,但由于它不仅只对B或C进行一次计数,因此给出了错误的3值:

<xsl:variable name="results_stores_count">
    <xsl:value-of select="count(Database/ResultsStore/Result[@Type='A' or @Type='B']/Info[not(@Value=0)]) />
</xsl:variable>

任何帮助或解决方法将不胜感激。

1 个答案:

答案 0 :(得分:1)

计算具有结果B或结果C且信息值不为零的结果存储的数量。

如果您要计算ResultsStores,则不要计算结果。另外,如果您要计算类型B和C,则不要计算类型A和B。

尝试:

<xsl:value-of select="count(Database/ResultsStore[Result[@Type='B']/Info/@Value!=0 or Result[@Type='C']/Info/@Value!=0]) "/>