Kri*_*rgh 2 xslt foreach loops key
有没有办法遍历一个键并输出它包含的所有值?
<xsl:key name="kElement" match="Element/Element[@idref]" use="@idref" />
Run Code Online (Sandbox Code Playgroud)
我虽然这样:
<xsl:for-each select="key('kElement', '.')">
<li><xsl:value-of select="." /></li>
</xsl:for-each>
Run Code Online (Sandbox Code Playgroud)
但是,这不起作用.我只是想列出一个键中的所有值以进行测试.
问题很简单:如何做到这一点?
Wel*_*bog 13
你不能.这不是关键所在.
key()只有当每个元素的键相同时,才可以使用单个调用遍历键中的每个元素.
如果需要循环定义键的所有内容,则可以使用元素match="..."属性中的表达式<key>.
所以如果你有这样的文件:
<root>
<element name="Bill"/>
<element name="Francis"/>
<element name="Louis"/>
<element name="Zoey"/>
</root>
Run Code Online (Sandbox Code Playgroud)
并且键定义如下:
<xsl:key name="survivors" match="element" use="@name"/>
Run Code Online (Sandbox Code Playgroud)
您可以使用其match属性的内容遍历密钥使用的内容:
<xsl:for-each select="element">
<!-- stuff -->
</xsl:for-each>
Run Code Online (Sandbox Code Playgroud)
或者,如果每个元素都有一些共同点:
<root>
<element name="Bill" class="survivor"/>
<element name="Francis" class="survivor"/>
<element name="Louis" class="survivor"/>
<element name="Zoey" class="survivor"/>
</root>
Run Code Online (Sandbox Code Playgroud)
然后你可以像这样定义你的密钥:
<xsl:key name="survivors" match="element" use="@class"/>
Run Code Online (Sandbox Code Playgroud)
并遍历所有这样的元素:
<xsl:for-each select="key('survivors', 'survivor')">
<!-- stuff -->
</xsl:for-each>
Run Code Online (Sandbox Code Playgroud)
因为每个元素共享class属性的值"幸存者" .
在你的情况下,你的钥匙是
<xsl:key name="kElement" match="Element/Element[@idref]" use="@idref" />
Run Code Online (Sandbox Code Playgroud)
所以你可以遍历它有这样的一切:
<xsl:for-each select="Element/Element[@idref]">
<!-- stuff -->
</xsl:for-each>
Run Code Online (Sandbox Code Playgroud)
您CAN创建密钥用于循环-如果你只需指定一个固定的关键元素的使用属性:
<xsl:key name="survivors" match="element" use="'all'"/>
Run Code Online (Sandbox Code Playgroud)
然后,您可以通过以下方式遍历所有元素:
<xsl:for-each select="key('survivors','all')">
...
</xsl:for-each>
Run Code Online (Sandbox Code Playgroud)
或算一算:
<xsl:value-of select="count(key('survivors','all'))"/>
Run Code Online (Sandbox Code Playgroud)
请注意,常量可以是任何字符串,甚至是数字 - 但"全部"读取得很好.
但是,您无法使用此密钥查找有关各个条目的信息(因为它们都具有相同的密钥).
换句话说,有两种类型的可能键:
我不知道这个方法的执行效率如何,但它确实通过避免在整个XSL代码中重复相同(可能非常复杂)的XPath表达式来提高XSL的维护效率.
| 归档时间: |
|
| 查看次数: |
21107 次 |
| 最近记录: |