xslt - 元素的位置必须按递增顺序
问题描述
我希望我的 XSLT 以递增的顺序找到元素的位置,例如 1、2、3、4、5 等,但我的 xslt 生成位置为 1、2、4、5、8。
XML
<tags>
<tag>
<display>Yes</display>
<data>position<data>
</tag>
<tag>
<display>Yes</display>
<data>position<data>
</tag>
<tag>
<display>No</display>
<data>position<data>
</tag>
<tag>
<display>No</display>
<data>position<data>
</tag>
<tag>
<display>Yes</display>
<data>position<data>
</tag>
</tags>
XSLT
<xsl:for-each select="tags/tag">
<xsl:if test="display[contains(text(),'Yes')]">
<xsl:value-of select="data"/> - <xsl:value-of select="position()"/>
</xsl:if>
</xsl:for-each>
预期输出:
我希望我的位置显示如下:
position - 1
position - 2
position - 3
实际输出:
position - 1
position - 2
position - 5
解决方案
position()
将基于您最初在 中选择的标签xsl:for-each
,并且您将选择所有 5 个标签作为开始。
相反,将您的 if 条件作为条件添加xsl:for-each
,因此您只选择您需要的 3,因此位置将根据需要为 1、2、3
<xsl:for-each select="tags/tag[display[contains(text(),'Yes')]]">
<xsl:value-of select="data"/> - <xsl:value-of select="position()"/>
<xsl:text> </xsl:text>
</xsl:for-each>
或者,您可以将其简化xsl:for-each
为......
<xsl:for-each select="tags/tag[contains(display,'Yes')]">
推荐阅读
- javascript - 如何将动态变量传递给 opener.window.form?
- ios - Instagram 用户名 Regex for Swift
- c++ - 使用生成日期向量
- excel - 如何使用 Excel VBA 为动态创建的对象分配引用
- c# - 表单识别器 408 通过自定义\训练 API 调用请求超时
- c# - 使用现有字段值和 C# 函数填充 SQLite 数据库中的新字段
- c# - 从另一个查询中存在的查询中过滤值
- javascript - Ajax 成功事件中显示 Laravel 验证错误
- c++ - 简单的多播应用程序无法在同一网络上的不同计算机上运行
- javascript - JavaScript 中的数组是用什么数据结构实现的?