XSLT 使用动态编号获取第 n 个节点
我需要将 CSS 类添加到 XSLT 模板输出的每个项目。类值需要包含节点的位置,这很好,但位置需要用单词(classOne、classTwo 等)而不是数字(class1、class2 等)书写。
我的代码几乎可以工作。它将位置正确地输出为数字,但是当我使用该位置返回数字的书面版本时,它每次都会选择第一个,所以我总是得到一个“classOne”类。如果我对数字进行硬编码,它就可以正常工作。
<xsl:param name="currentPage"/>
<xsl:variable name="numbers" select="my.library:Split('One,Two,Three,Four,Five,Six,Seven,Eight',',')"/>
<xsl:template match="/">
<xsl:apply-templates select="$currentPage/*[starts-with(name(), 'largeImage')]" mode="large" />
</xsl:template>
<xsl:template match="*" mode="large">
<xsl:variable name="index" select="substring(name(), 11)"/>
<div class="class{$numbers/*[$index]}">item</div>
</xsl:template>
谁能看到我如何才能将 $index 值转换为书面等效值?
I need to add CSS classes to each item output by an XSLT template. The class values need to include the position of the node, which is fine, but the position needs to be written in words (classOne, classTwo etc) rather than a digits (class1, class2 etc).
The code I have almost works. It outputs the position correctly as a number, but when I use that position to return the written version of the number it just picks the first one every time, so I always get a class of 'classOne'. If I hard-code the number it works fine.
<xsl:param name="currentPage"/>
<xsl:variable name="numbers" select="my.library:Split('One,Two,Three,Four,Five,Six,Seven,Eight',',')"/>
<xsl:template match="/">
<xsl:apply-templates select="$currentPage/*[starts-with(name(), 'largeImage')]" mode="large" />
</xsl:template>
<xsl:template match="*" mode="large">
<xsl:variable name="index" select="substring(name(), 11)"/>
<div class="class{$numbers/*[$index]}">item</div>
</xsl:template>
Can anyone see how I can get it to convert the $index value into the written equivalent?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
使用
item
。如果这不起作用,那么您需要显示 my.library:Split 函数返回的数据类型的详细信息。Use
<div class="class{$numbers/*[position() = $index]}">item</div>
. If that does not work then you need to show details of what kind of data your my.library:Split function returns.不需要字符串分割和扩展函数来执行所需的处理:
I。 XSLT 1.0 解决方案
此转换:
应用于此 XML 文档时(未提供源 XML 文档!):
产生所需的正确结果:
二. XSLT 2.0 解决方案
当应用于同一个 XML 文档(如上)时,会产生相同的正确结果:
No string-splitting and extension functions are necessary to carry out the required processing:
I. XSLT 1.0 Solution
This transformation:
when applied on this XML document (no source XML document was provided!):
produces the wanted, correct result:
II. XSLT 2.0 Solution
when applied on the same XML document (above), the same correct result is produced:
有点更冗长,但你可以尝试类似的方法:
你可以用以下方式调用它:
Somewhat more verbose, but you could try something like:
you can call it with: