我使用此模板生成xHTML-doc中“id ='{title}'引用的各个部分的内部链接列表。
<xsl:template match="folder/folder" mode="folderlist">
<li>[<a href="#{title}"><xsl:value-of select="title" /></a>]</li>
</xsl:template>
它有效,但当然不会验证,因为'title'的内容可能包含sapces,规则说“id”不能有空格。
我们假设{title}的内容是:'带空格的标题'。
我想要实现的是从{title}的内容中删除要插入到href =中的空格,以便结果如下所示:
<a href="Titlewithspaces">
然后以某种方式再次使用{title}的原始内容,因此完整的结果行变为:
<li>[<a href="#Titlewithspaces">Title with spaces</a>]</li>
这有可能吗?如果是这样,有人可以告诉我如何实现这一目标吗? 感谢。
答案 0 :(得分:2)
一个通用的解决方案(XPath 1.0和XPath 2.0 - 分别是XSLT 1.0和XSLT 2.0)当我们想要替换任何非字母数字字符时,比方说,下划线:
<a href="#{translate(., translate(.,$vAlphaNum,''), '_')}">
其中变量vAlphaNum
被定义为包含所有字母(A-Z和a-z)和所有数字(0-9)的字符串。
这就是所谓的“双翻译方法”,首先由@Michael Kay提出。
答案 1 :(得分:1)
您可以使用translate()
功能:
translate(title, ' 	
', '')
将其应用于示例模板:
<xsl:template match="folder/folder" mode="folderlist">
<li>[<a href="#{translate(title, ' 	
', '')}">
<xsl:value-of select="title" /></a>]</li>
</xsl:template>
答案 2 :(得分:1)
您可以使用normalize-space()
函数删除前导/尾随空格并将任何重复的空白字符折叠为单个空格,然后使用translate()
函数替换任何剩余空格。< / p>
translate(normalize-space(title),' ',''))
将其应用于示例模板:
<xsl:template match="folder/folder" mode="folderlist">
<li>[<a href="#{translate(normalize-space(title),' ','')}">
<xsl:value-of select="title" /></a>]</li>
</xsl:template>