我想用每个字母的链接来写字母表。所以我使用模板,但我不知道如何使这个字母我尝试过,但我有一个正常的错误:(十进制表示必须立即跟随字符引用中的)。
<xsl:template name="alphabet">
<xsl:param name="iLetter"/>
<xsl:if test="$iLetter < 91">
<a><xsl:attribute name="href">req.html?X_letter=&#<xsl:value-of select="$iLetter"/>;</xsl:attribute>&#<xsl:value-of select="$iLetter"/>;</xsl:attribute></a>
<xsl:call-template name="alphabet">
<xsl:with-param name="iLetter" select="number($iLetter)+1"/>
</xsl:call-template>
</xsl:if>
</xsl:template>
我这样命名这个模板:
<xsl:call-template name="alphabet">
<xsl:with-param name="iLetter" select="number(65)"/>
</xsl:call-template>
所以,我想得到这个结果:
A B C D ..... X Y Z
without…当然:)
当前接受的答案是不正确的,因为它不能正确地生成任何a
元素的文本子元素
下面是一个正确的XSLT 1.0解决方案:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:variable name="vAlpha" select="'ABCDEFGHIJKLMNOPQRSTUVWXYZ'"/>
<xsl:template match="/">
<xsl:call-template name="alphabet"/>
</xsl:template>
<xsl:template name="alphabet">
<xsl:param name="pCode" select="65"/>
<xsl:if test="not($pCode > 90)">
<xsl:variable name="vChar" select=
"substring($vAlpha, $pCode - 64, 1)"/>
<a href="req.html?X_letter={$vChar}">
<xsl:value-of select="$vChar"/>
</a>
<xsl:call-template name="alphabet">
<xsl:with-param name="pCode" select="$pCode+1"/>
</xsl:call-template>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
当应用于任何XML文档(未使用)时,将生成所需的正确结果:
<a href="req.html?X_letter=A">A</a>
<a href="req.html?X_letter=B">B</a>
<a href="req.html?X_letter=C">C</a>
<a href="req.html?X_letter=D">D</a>
<a href="req.html?X_letter=E">E</a>
<a href="req.html?X_letter=F">F</a>
<a href="req.html?X_letter=G">G</a>
<a href="req.html?X_letter=H">H</a>
<a href="req.html?X_letter=I">I</a>
<a href="req.html?X_letter=J">J</a>
<a href="req.html?X_letter=K">K</a>
<a href="req.html?X_letter=L">L</a>
<a href="req.html?X_letter=M">M</a>
<a href="req.html?X_letter=N">N</a>
<a href="req.html?X_letter=O">O</a>
<a href="req.html?X_letter=P">P</a>
<a href="req.html?X_letter=Q">Q</a>
<a href="req.html?X_letter=R">R</a>
<a href="req.html?X_letter=S">S</a>
<a href="req.html?X_letter=T">T</a>
<a href="req.html?X_letter=U">U</a>
<a href="req.html?X_letter=V">V</a>
<a href="req.html?X_letter=W">W</a>
<a href="req.html?X_letter=X">X</a>
<a href="req.html?X_letter=Y">Y</a>
<a href="req.html?X_letter=Z">Z</a>
二世。XSLT 2.0解决方案:
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:my="my:my" exclude-result-prefixes="xs my"
xmlns="http://www.w3.org/1999/xhtml">
<xsl:output omit-xml-declaration="yes" method="xhtml" indent="yes"/>
<xsl:param name="pStart" as="xs:integer" select="65"/>
<xsl:param name="pEnd" as="xs:integer" select="90"/>
<xsl:variable name="vCodes" as="xs:integer*" select=
"for $i in $pStart to $pEnd
return $i
"/>
<xsl:template match="/">
<html>
<xsl:sequence select="my:alphabet()"/>
</html>
</xsl:template>
<xsl:function name="my:alphabet" as="element()*">
<xsl:for-each select="$vCodes">
<xsl:variable name="vChar" select="codepoints-to-string(.)"/>
<a href="req.html?X_letter={$vChar}">
<xsl:sequence select="$vChar"/>
</a>
</xsl:for-each>
</xsl:function>
</xsl:stylesheet>
正如Martin建议的那样,最好避免使用disable-output-escaping。您也不需要它,如果您对普通ascii字符而不是数字字符引用感到满意的话。如果是这样,可以使用子字符串和字母查找字符串,如下所示:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:variable name="alphabet" select="'ABCDEFGHIJKLMNOPQRSTUVWXYZ'"/>
<xsl:template name="alphabet">
<xsl:param name="iLetter" select="65"/>
<xsl:if test="$iLetter < 91">
<a>
<xsl:attribute name="href">req.html?X_letter=<xsl:value-of select="substring($alphabet, $iLetter - 64, 1)"/></xsl:attribute>
<xsl:value-of select="substring($alphabet, $iLetter - 64, 1)"/>
</a>
<xsl:call-template name="alphabet">
<xsl:with-param name="iLetter" select="number($iLetter)+1"/>
</xsl:call-template>
</xsl:if>
</xsl:template>
<xsl:template match="/">
<xsl:call-template name="alphabet"/>
</xsl:template>
</xsl:stylesheet>
干杯!
在a
元素内容中,您可以禁用输出转义,如
<a href="req.html?X_letter={$iLetter}">
<xsl:value-of select="concat('&#', $iLetter, ';')" disable-output-escaping="yes"/>
</a>
这种方法在属性节点中不起作用,所以我留下了该部分来传递字符代码,而不是字符。
还要注意,disable-output-escaping是一个可选的序列化特性,并非所有XSLT处理器都支持,例如Firefox/Mozilla的内置XSLT处理器不会序列化结果树,而是简单地呈现它,因此该方法无法工作。
XSLT 2.0具有codepoints-to-string()
功能。对于许多XSLT 1.0处理器,实现与扩展函数相同的函数应该很容易,尽管这会使您的代码依赖于该处理器。
相关内容
- 没有找到相关文章
最新更新
- 获取python中从1开始的值的特定索引
- BeautifulSoup美化编码非英语(西里尔字母)字符奇怪
- 为什么' rev().rev() '工作,但' rev().skip(1).rev() '不工作? &
- 我可以在共享媒体目录DCIM或Android的下载目录下编程创建空子目录吗?
- 错误:太多的重新渲染.React限制了渲染的次数,以防止无限循环.带有嵌套函数的自定义钩子
- (Python 3.8)如何将变量转换为没有分隔符的列表?
- 解决Docker层缓存在Azure Pipeline中不工作的问题
- Jetpack compose:可以设置下拉菜单的高度,以显示下一个项目
- 如何平嵌套的可观察对象,从RXJS
- 为什么我的解决方案不正确的旅游切片练习?
- 我如何使用sbt命令,如清洁和编译在我的自定义sbtplugin
- Angular语言 - 根据给定的数据自动填充嵌套表单
- node-gyp configure将错误:在VisualStudioFinder中生成EPERM
- Spring WebClient检索封装在results属性下的json对象
- 尝试设置BlazorMonaco编辑器时"ReferenceError: monaco is not defined"
- Pandas以正确的顺序创建一个列的DataFrame
- 在clojure中,vector前面的quote是什么意思?
- 在模板前使用隐式转换
- r语言 - 为什么我的生存曲线没有显示为分层分类?
- 触发通过外部记录创建API提交脚本之前/之后
- 为什么esp8266客户端没有连接到服务器?
- react-native-map-clustering的性能问题
- 如何在Flutter中设置图像选择器中的图像的最大大小
- dotenv:命令在nestjs项目中找不到
- 测试苗条的动态部件
- urllib.error.HTTPError:HTTP错误403:禁止使用urllib.requests
- 无法写入日志目录- symfony 5
- 写JSON例如persondata的正确方法是什么?
- Django Password Expiry
- 如何使用python为XML文件中的现有文本添加XML元素
热门标签:
javascript python java c# php android html jquery c++ css ios sql mysql arrays asp.net json python-3.x ruby-on-rails .net sql-server django objective-c excel regex ruby linux ajax iphone xml vba spring asp.net-mvc database wordpress string postgresql wpf windows xcode bash git oracle list vb.net multithreading eclipse algorithm macos powershell visual-studio image forms numpy scala function api selenium