0

我想在下面的结构中找到所有 NewConsumptionData 和 RegisterConsumptionData 元素的 RegisterValueData 元素的数量,所以只有一个数字。

<ConsumptionData>
<NewConsumptionData>
    <FromDate>2021-02-02T00:00:00</FromDate>
    <RegistersValues>
        <RegisterConsumptionData>
            <Timeframe>TOTAL_HOUR</Timeframe>
            <Values>
                <RegisterValueData>
                    <Quality>NONVALIDATED</Quality>
                </RegisterValueData>
                <RegisterValueData>
                    <Quality>VALIDATED</Quality>
                </RegisterValueData>
            </Values>
        </RegisterConsumptionData>
        <RegisterConsumptionData>
            <Timeframe>TOTAL_HOUR</Timeframe>
            <Values>
                <RegisterValueData>
                    <Quality>NONVALIDATED</Quality>
                </RegisterValueData>
                <RegisterValueData>
                    <Quality>VALIDATED</Quality>
                </RegisterValueData>
            </Values>
        </RegisterConsumptionData>
    </RegistersValues>
</NewConsumptionData>
<NewConsumptionData>
    <FromDate>2021-02-02T00:00:00</FromDate>
    <RegistersValues>
        <RegisterConsumptionData>
            <Timeframe>TOTAL_HOUR</Timeframe>
            <Values>
                <RegisterValueData>
                    <Quality>NONVALIDATED</Quality>
                </RegisterValueData>
                <RegisterValueData>
                    <Quality>VALIDATED</Quality>
                </RegisterValueData>
            </Values>
        </RegisterConsumptionData>
        <RegisterConsumptionData>
            <Timeframe>TOTAL_HOUR</Timeframe>
            <Values>
                <RegisterValueData>
                    <Quality>NONVALIDATED</Quality>
                </RegisterValueData>
                <RegisterValueData>
                    <Quality>VALIDATED</Quality>
                </RegisterValueData>
            </Values>
        </RegisterConsumptionData>
    </RegistersValues>
</NewConsumptionData>

看起来很简单,我无法理解这一点。我正在尝试一个递归函数(如果这是正确的方法),但不确定如何设置参数并防止它无限循环。

4

1 回答 1

0

您可以轻松地使用该count()函数来计算子节点或后代节点:

XSLT 1.0

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>

<xsl:template match="/">
    <result>
        <xsl:value-of select="count(//RegisterValueData)" />
    </result>   
</xsl:template>

</xsl:stylesheet>

或者更有效一点:

<xsl:template match="/ConsumptionData">
    <result>
        <xsl:value-of select="count(NewConsumptionData/RegistersValues/RegisterConsumptionData/Values/RegisterValueData)" />
    </result>   
</xsl:template>

结果

<?xml version="1.0" encoding="UTF-8"?>
<result>8</result>
于 2021-03-01T17:09:34.793 回答