xslt-fn:替换未按预期工作



我正在尝试将字符串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')}"/>

相关内容

  • 没有找到相关文章