xslt - 遍历/循环通过 XSL key : how?

标签 xslt loops foreach key

有没有办法遍历一个键并输出它包含的所有值?

   <xsl:key name="kElement" match="Element/Element[@idref]" use="@idref" />

我是这样想的:
<xsl:for-each select="key('kElement', '.')">
  <li><xsl:value-of select="." /></li>
</xsl:for-each>

但是,这不起作用。我只是想列出一个键中的所有值以进行测试。

问题很简单:如何做到这一点?

最佳答案

你不能。这不是 key 的用途。

您可以使用对 key() 的一次调用来遍历键中的每个元素。当且仅当每个元素的键相同。

如果你需要遍历所有定义的键,你可以使用 match="..." 中的表达式。您的 <key> 的属性元素。

因此,如果您有这样的文件:

<root>
  <element name="Bill"/>
  <element name="Francis"/>
  <element name="Louis"/>
  <element name="Zoey"/>
</root>

和一个这样定义的键:
<xsl:key name="survivors" match="element" use="@name"/>

您可以通过使用其match 的内容来循环访问 key 使用的内容。属性:
<xsl:for-each select="element">
  <!-- stuff -->
</xsl:for-each>

或者,如果每个元素都有共同点:
<root>
  <element name="Bill" class="survivor"/>
  <element name="Francis" class="survivor"/>
  <element name="Louis" class="survivor"/>
  <element name="Zoey" class="survivor"/>
</root>

然后你可以像这样定义你的 key :
<xsl:key name="survivors" match="element" use="@class"/>

并像这样遍历所有元素:
<xsl:for-each select="key('survivors', 'survivor')">
  <!-- stuff -->
</xsl:for-each>

因为每个元素共享 class 的值“幸存者”。属性。

在你的情况下,你的关键是
<xsl:key name="kElement" match="Element/Element[@idref]" use="@idref" />

因此,您可以像这样遍历它所具有的所有内容:
<xsl:for-each select="Element/Element[@idref]">
  <!-- stuff -->
</xsl:for-each>

关于xslt - 遍历/循环通过 XSL key : how?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2757871/

相关文章:

XML 合并节点

html - xslt: css 在 html 页面中不工作

javascript - 将外部 javaScript 函数调用到 XSLT 文件中

foreach - 尝试查找两个列表项之间的差异时 Netlogo foreach 出错

arrays - SwiftUI 中的同一个 ForEach 中是否可以有 2 个数组?

html - 如何使用XSLT在XML元素中获取所有内容

谁能用c语言为我简化这段代码?

python - 创建一个无限循环

javascript - 强制 JavaScript setTimeout 函数在 x 毫秒后运行

javascript - 以下代码是否等待 forEach 完成