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

时间:2016-08-17 14:06:05

标签: xml xslt xpath

我正在浏览一些XSLT函数并遇到两个主要命名为$dq = Author::get()->dataQuery(); $dq->sort(null, null, true); $authors = Author::get()->setDataQuery($dq); translate的内容,据我所知,到目前为止,这两个函数的工作正在取代一些内容。声明的实体(请在此更多地启发我)。

此外,我正在编写一个XSLT,我希望用一堆像下面的值替换单个值。

replace

<div class="translate"> <xsl:value-of select="translate(current(),' ', 'XXXXX')"/> </div> <div class="replace"> <xsl:value-of select="replace(current(),' ', 'XXXXX')"/> </div> 只添加了一个translate,但我添加了X,因为替换工作正常。

有人可以让我知道后台发生了什么吗?

这是一个有效的样本http://xsltransform.net/6rewNxE/2

2 个答案:

答案 0 :(得分:3)

translate()和replace()

之间的区别

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

因此,在您的示例中:

  • translate() 会将每个' '(空格)字符替换为&#39; X&#39; 字符,因为$mapTo字符对应于 ' '$mapFrom(空格)的等效位置为&{39; X&#39;。
  • replace() 将替换第一个" "(单空格)子字符串 使用"XXXXX",因为文字$pattern与第一个匹配 发生" "(单空格)子字符串并将其替换为 完整的$replacement字符串。

答案 1 :(得分:2)

replace-function将一个字符串替换为字符串中的另一个字符串。如果有字符串“abcacb”并且用“xy”替换“ab”,则会得到“xycacb”。

replace("abcacb","ab","xy") = "xycabc"

translate函数逐字符替换字符串charcter。 “please-replace-this-string”中的第一个字符将替换为“replace-with-this-string”中的第一个字符 因此,如果存在字符串“abcacb”并且您将“ab”翻译为“xy”,则会得到“xycxcy”。

translate("abcacb","ab","xy") = "xycxcy"

根据您的情况:

  • 替换:''将替换为'XXXXX'
  • translate''将替换为'XXXXXX'的第一个字符'X'

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