统计嵌套子节点的个数
Count the number of nested child nodes
我想为所有 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>
看似简单的事情我无法理解。我正在尝试递归函数(如果这是正确的方法)但不确定如何设置参数并防止它无限循环。
您可以轻松地使用 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>
我想为所有 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>
看似简单的事情我无法理解。我正在尝试递归函数(如果这是正确的方法)但不确定如何设置参数并防止它无限循环。
您可以轻松地使用 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>