使用xsl删除字符

时间:2012-10-26 14:37:22

标签: xml xslt xslt-1.0

我需要使用xsl 1.0

从字符串值中删除以下字符

*, /, \, #, %, !, @, $, (, ), &

我想出了以下内容:

translate(translate(translate(string(//xpath/@value),'.',''),'/',''),',','')

在上面的方法中,我必须多次复制相同的代码(每个字符一次)。

如何在不重复代码的情况下实现相同目标?

谢谢: - )

2 个答案:

答案 0 :(得分:21)

translate()函数接受第二个和第三个参数两个字符串 - 而不仅仅是两个字符

translate(., $string1, '')

生成一个字符串,该字符串是上下文(当前)节点的字符串值,其中$string1中出现的任何字符都将被删除。

因此您可以使用

translate(expressionSelectingNode, "/\#%!@$()&", "")

删除第二个参数中包含的任何字符

当然,如果在XSLT样式表中使用translate()函数(或者通常在XML文档中),则必须转义某些特殊字符,例如<&分别为&lt;&amp;

使用它非常强大,可以删除一组未知字符

想象一下,您想要从任何字符串中删除所有非数字字符。我们事先并不知道字符串中会出现什么字符,因此我们不能在translate()的第二个参数中枚举它们。但是我们仍然可以删除所有这些未知的字符:

translate(., translate(., '0123456789', ''), '')

内部translate()生成字符串sans任何数字。

外部translate()从原始字符串中删除所有这些非数字字符(由内部translate()找到) - 因此剩下的只是数字字符。

答案 1 :(得分:17)

您只需要在纯文本中使用translate(//foo/@value, '*\%!@$&', '')分别在XSLT样式表等XML文档中,您需要转义符号<xsl:value-of select="translate(//foo/@value, '*\%!@$&amp;', '')"/>