有没有办法遍历一个键并输出它包含的所有值?
<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/