我正在尝试将字符串location
替换为tocation
,所以基本上这是我的代码:
<div id="{fn:replace('location','l','t')}">
但它没有给我tocation
,而是给了我t
?!
实时示例:转到http://www.w3schools.com/xsl/tryxslt.asp?xmlfile=cdcatalog&xsltfile=cdcatalog_ex1在第二个文本区域输入此代码并点击按钮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>
我无法重新处理报告的问题。
当我使用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"/>
这意味着您使用的是不兼容/有缺陷的XSLT2.0处理器。
联系供应商并提交错误。
如果您使用的是XSLT1.0处理器,则需要编写一个递归命名模板来进行简单的泛型替换(不使用RegExes)。在"xslt"标签中有很多这样的好例子,可以在类似问题的答案中找到。
然而,您想要执行的特定更改可以更容易地完成:
<div id="{translate('location','l','t')}"/>