我需要使用 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()
找到)——因此剩下的只是数字字符。
关于xml - 使用 xsl 删除字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13089002/