17

我需要使用从字符串值中删除以下字符xsl 1.0

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

我想出了以下几点:

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

在上述方法中,我将不得不多次复制相同的代码(每个字符一次)。

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

谢谢 :-)

4

2 回答 2

23

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

translate(., $string1, '')

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

因此,您可以使用

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

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

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

使用它是如此强大,以至于可以删除一组未知字符

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

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

内部translate()产生没有任何数字的字符串。

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

于 2012-10-26T14:48:07.527 回答
17

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

于 2012-10-26T14:40:40.053 回答