我需要使用从字符串值中删除以下字符xsl 1.0
*, /, \, #, %, !, @, $, (, ), &
我想出了以下几点:
translate(translate(translate(string(//xpath/@value),'.',''),'/',''),',','')
在上述方法中,我将不得不多次复制相同的代码(每个字符一次)。
如何在不复制代码的情况下实现相同的目标?
谢谢 :-)
该translate()
函数接受两个字符串作为其第二个和第三个参数,而不仅仅是两个字符。
translate(., $string1, '')
生成一个字符串,它是上下文(当前)节点的字符串值,其中$string1
删除了任何出现的字符。
因此,您可以使用:
translate(expressionSelectingNode, "/\#%!@$()&", "")
删除第二个参数中包含的任何字符。
当然,如果translate()
函数在 XSLT 样式表中使用(或者,通常在 XML 文档中),一些特殊字符,例如<
和&
必须分别转义为<
和&
。
使用它是如此强大,以至于可以删除一组未知字符:
想象一下,您想从任何字符串中删除所有非数字字符。我们事先不知道字符串中会出现什么字符,因此我们不能只在 . 的第二个参数中枚举它们translate()
。但是我们仍然可以像这样删除所有这些未知字符:
translate(., translate(., '0123456789', ''), '')
内部translate()
产生没有任何数字的字符串。
外部从原始字符串translate()
中删除所有这些非数字字符(由内部找到translate()
) - 因此剩下的只是数字字符。
您只需translate(//foo/@value, '*\%!@$&', '')
在纯 XPath 中分别在 XML 文档(如 XSLT 样式表)中转义 & 符号<xsl:value-of select="translate(//foo/@value, '*\%!@$&', '')"/>
。