我正在尝试将字符串location
替换为tocation
,所以基本上这是我的代码:
<div id="{fn:replace('location','l','t')}">
但不是给我tocation
而是给了我t
?!
直播示例:转到http://www.w3schools.com/xsl/tryxslt.asp?xmlfile=cdcatalog&xsltfile=cdcatalog_ex1
在第二个textarea中输入此代码并点击按钮Edit and Click Me
:
<?xml version="2.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<div>
<xsl:value-of select="fn:replace('location','l','t')"/>
</div>
</xsl:template>
</xsl:stylesheet>
答案 0 :(得分:3)
我无法重现报告的问题。
当我使用Saxon 9.1.05和XQSharp执行此转换时:
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:template match="/">
<div id="{replace('location','l','t')}"/>
</xsl:template>
</xsl:stylesheet>
任何XML文档(未使用)上的,两种情况下的结果都是预期的,正确的:
<div xmlns:xs="http://www.w3.org/2001/XMLSchema" id="tocation"/>
这意味着您使用的是不合规/错误的XSLT 2.0处理器。
与供应商联系并提交错误。
如果您使用的是XSLT 1.0处理器,则需要编写一个递归命名模板来进行简单的泛型替换(不使用RegExes)。在“xslt”标签中有许多这样的好例子可以在类似问题的答案中找到。
您想要执行的具体更改可以更轻松地完成:
<div id="{translate('location','l','t')}"/>