xslt-1.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>
看起来很简单,我无法理解这一点。我正在尝试一个递归函数(如果这是正确的方法),但不确定如何设置参数并防止它无限循环。
解决方案
您可以轻松地使用该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>
推荐阅读
- oauth-2.0 - 找Api区分个人账户还是企业账户
- reactjs - React-router 与 Link 或 NavLink click 上的任何路由都不匹配(但如果我们刷新它就可以工作)
- reactjs - Formik 的 resetForm 方法没有按预期工作
- java - 用于搜索文件的 Java 程序
- haskell-stack - 如何在堆栈构建中包含来自 git 的依赖项?
- python - Jinja for Flask web 中的嵌套 for 循环
- kubernetes - 暂时停止 K8s 和 Cassandra 集群
- javascript - 尝试将待办事项呈现为
- ,但 todo.name 未定义
- docker - 使用 ingress-nginx 在 Kubernetes 中提供静态资产
- python - 确实网站的Scrapy爬虫分页