xslt - XSLT 需要计算父节点内 count 大于 1 的节点数
问题描述
鉴于以下简化的 XML,我需要计算 /root/a/ 下有超过 1 个节点的节点数。因此,即使总共有 8 个节点,对我来说正确答案是 3,因为第一个和最后一个 /root/a 总共有超过 1、3 个。我在这里的 xslt 只会给我 8 的值。我已经看过使用键、位置功能等不成功......但我认为可能有更简单的答案。谢谢你的帮助。
<root>
<a>
<b>
<c>valuex</c>
</b>
<b>
<c>valuey</c>
</b>
</a>
<a>
<b>
<c>valuez</c>
</b>
</a>
<a>
<b>
<c>valuex</c>
</b>
</a>
<a>
<b>
<c>valuex</c>
</b>
</a>
<a>
<b>
<c>valuex</c>
</b>
<b>
<c>valuey</c>
</b>
<b>
<c>valuey</c>
</b>
</a>
<a>
</a>
</root>
我的样式表
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<xsl:variable name="addCount">
<xsl:choose>
<xsl:when test="/root/a/b">
<xsl:value-of select="count(/root/a/b)"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="0"/>
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:value-of select="$addCount"/>
</xsl:template>
</xsl:stylesheet>
解决方案
根据您的评论,听起来好像您想查找属于 的b
子元素/root/a
但不是b
每个元素下的第一个元素的元素的计数a
。
您可以使用以下命令选择所有子b
元素,并从每个集合中/root/a
排除第一个元素:b
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<xsl:value-of select="count(/root/a/b[position() > 1])"/>
</xsl:template>
</xsl:stylesheet>
您还可以使用以下内容来获取所有b
具有 a 元素的元素preceding-sibling
的计数b
:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<xsl:value-of select="count(/root/a/b[preceding-sibling::b])"/>
</xsl:template>
</xsl:stylesheet>
推荐阅读
- javascript - 如何在函数生成的两个文件之间共享变量
- java - 使用 JavaFx 从标签中获取值?
- angular - 如何在 app.module 中调用服务内部的方法 - Angular
- reactjs - React Hook:为什么我的 alert 和收到的 props 不一样?
- python - 根据用户输入从 datetime.datetime.now() 中添加或减去时间的函数
- c# - 控件的重叠
- coffeescript - 是否可以在不使用大括号的情况下在一行中描述对象数组?
- html - 如何使我的图像网格响应/调整大小和设置断点
- r - 使用 dplyr 按存储在第二个数据帧中的 32 个条件过滤数据帧
- powershell - 计划覆盖现有目录powershell