在XSLT 2.0中使用替换函数替换字符串

14

我有一个像这样的字符串

"My string"

现在我想用best替换my,以便输出结果为best string。我尝试过类似这样的东西:

 <xsl:value-of select="replace( 'my string',my,best)"/>

但很可能是错误的语法

我已经搜索了很多,但没有找到任何东西...在任何地方都解释了如何使用机制来做XSLT 1.0。有人能告诉我如何在XSLT 2.0中做到这一点吗?相对于1.0更简单的方法

2个回答

24

给定:

<xsl:variable name="s1" select="'My string'"/>

只需使用:

<xsl:value-of select="replace($s1, 'My', 'best')"/>

请注意,这里应用了正则表达式。意思是:

<xsl:value-of select="replace('test.replace', '.', ':')"/>

变为:

::::::::::::

一定要对正则表达式解释器具有特殊含义的字符进行转义:

<xsl:value-of select="replace('test.replace', '\.', '::')"/>

变成:

test::replace

1
@AKS:您确定正在使用 XSLT 2.0 吗?如果是这样,也许您应该在 XSLT 中声明命名空间 xmlns:fn="http://www.w3.org/2005/xpath-functions" 并将函数用作 fn:replace($s1, 'My', 'best')。请参见:http://www.w3schools.com/xpath/xpath_functions.asp - Mark Veenstra
2
@AKS,如果您想使用XSLT 2.0,您需要使用Saxon 9、AltovaXML或XMLPrime等XSLT 2.0处理器。 - Martin Honnen

6

首先检查一下你的xslt处理器(saxxon)是否是最新版本。然后,在你的xslt样式表的头部设置<xsl:stylesheet version="2.0"。就这样了。 除此之外,你的代码没问题,只是你忘记了引号:

<xsl:value-of select="replace( 'my string',my,best)"/>

必须。
<xsl:value-of select="replace('my string','my','best')"/>

如何查找正在使用的XSLT处理器?我正在尝试在一个XSL表单中使用“replace”函数,该表单将由Apache FOP 2.2处理,将“xsl:stylesheet”版本更改为2.0并不能解决我的问题。添加“xmlns:fn =”http://www.w3.org/2005/xpath-functions“”也没有起作用。谢谢! - Pierre C

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接