XPath中的translate和replace之间有什么区别

use*_*959 8 xml xslt xpath

我正在浏览一些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,在那里作为替换工作正常.

有人可以让我知道背景中发生了什么吗?

这是一个工作示例http://xsltransform.net/6rewNxE/2

Geh*_*net 6

替换函数用字符串中的另一个字符串替换一个字符串。如果有字符串“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"

对于您的情况:

  • 替换:' ' 将被替换为 'XXXXX'
  • 翻译 ' ' 将被替换为 'XXXXXX' 的第一个字符,即 'X'

Oracle-SQL 函数的解释也可能有所帮助(基本相同):

  • 根据您提供的replace() Oracle 链接,您的replace() 示例不太正确。而不是=“xycabc”,它应该是“xycacb” (2认同)

kjh*_*hes 5

translate()和replace()之间的区别

请注意,该translate()功能从XPath 1.0开始可用。replace(),来自XPath 2.0。

因此,在您的示例中:

  • translate()会用' '' X'字符替换每个(空格)字符,因为$mapTo对应于' '(空格)在等价位置的字符$mapFrom是' X'。
  • replace()将用替换第一个" "(单空格)子字符串"XXXXX",因为文字$pattern与第一个" "(单空格)子字符串匹配,并用完整$replacement字符串替换。