我正在浏览一些XSLT函数并遇到两个主要命名为,translate并且replace,据我所知,在一天结束时,这两个函数的工作正在替换声明的实体上的一些内容(请在此更多地启发我).
此外,我正在编写一个XSLT,我希望用下面的一堆值替换单个值.
<div class="translate">
<xsl:value-of select="translate(current(),' ', 'XXXXX')"/>
</div>
<div class="replace">
<xsl:value-of select="replace(current(),' ', 'XXXXX')"/>
</div>
Run Code Online (Sandbox Code Playgroud)
该translate是只增加一个X,虽然我已经添加了XXXXX,在那里作为替换工作正常.
有人可以让我知道背景中发生了什么吗?
替换函数用字符串中的另一个字符串替换一个字符串。如果有字符串“abcacb”并且您将“ab”替换为“xy”,则会得到“xycacb”。
replace("abcacb","ab","xy") = "xycacb"
Run Code Online (Sandbox Code Playgroud)
translate 函数逐个字符替换字符串。“please-replace-this-string”中的第一个字符将被替换为“replace-with-this-string”中的第一个字符所以如果有字符串“abcacb”并且你将“ab”翻译成“xy”你得到“xycxcy”。
translate("abcacb","ab","xy") = "xycxcy"
对于您的情况:
Oracle-SQL 函数的解释也可能有所帮助(基本相同):
$mapFrom为中等价的
字符$mapTo。$pattern为$replacement字符串。请注意,该translate()功能从XPath 1.0开始可用。replace(),来自XPath 2.0。
因此,在您的示例中:
translate()会用' '' X'字符替换每个(空格)字符,因为$mapTo对应于' '(空格)在等价位置的字符$mapFrom是' X'。replace()将用替换第一个" "(单空格)子字符串"XXXXX",因为文字$pattern与第一个" "(单空格)子字符串匹配,并用完整$replacement字符串替换。