1.XPATH
在操作xml时经常会需要做某些字符的替换,虽然xpath中提供了函数translate(string,replaced_txt,replacement_txt),但它只是字符一对一的映射替换,如translate("misshjn","mnh","MN"),则得到MissjN。这个函数远远解决不了很多字符串的替换问题。巧妙地运用xpath的几个标签构造下面这个template就可以实现:
<xsl:template name="replace">
<xsl:param name="text"/>
<xsl:param name="key"/>
<xsl:param name="rep"/>
<xsl:choose>
<xsl:when test="contains($text, $key)">
<xsl:value-of select="concat(substring-before($text, $key), $rep)"/>
<xsl:call-template name="replace">
<xsl:with-param name="text" select="substring-after($text, $key)"/>
<xsl:with-param name="key" select="$key"/>
<xsl:with-param name=”rep“ select="$rep"/>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$text"/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
调用的时候
<xsl:call-template name="replace">
<xsl:with-param name="text" select="'Hello World!'"/>
<xsl:with-param name="key" select="'o'"/>
<xsl:with-param name="rep" select="'[o]'"/>
</xsl:call-template>
2.Java replaceAll
这个其实倒没太多的可讲的,在这里要注意一下正则表达式在各种类型的替换中所发挥的作用,比如
String text = "xxxxxxxxxxx";
text.replaceAll(".html",".jsp");会替换所有的html为jsp
text.replaceAll("/.html","/.jsp");会替换只会替换.html为.jsp
再如text.replaceAll("//d", "*");就可讲所有的数字成星号
还有,replaceAll()是基于规则表达多的替换,而replace()只是一般的基于字符或字符序列本身的替换
3.javascript replace
text.replace(/a/,"A")只会替换首字母
text.replace(/a/g,"A")才会替换所有的a字母
replace()不仅能与正则表达式合作,而且它还能与函数进行合作,发挥出强大的功能,如
function change(word){ return word.indexOf(0).toUpperCase()+word.substring(1);}
text.replace(//b/w+/b/g,change);就可实现将所有单词首字母换成大写
所以,从以上可以看出正则表达式和函数的结合运用可以将字符字符串的替换功能扩展到更高级的层面。