我想用 x
替换所有其他(奇数?)空格。结果应该是:
axb axb axb axb axb
我尝试过类似的方法:
replace ("a b a b a b a b" , " " , "x")[position() mod 2 = 0]
--但没有结果。
最佳答案
首先:fn:replace
需要 XPath 2.0(或 XQuery)兼容的查询处理器。
您不能将 fn:replace
与这样的谓词一起使用。 XPath 中没有对字符进行类似数组的访问(就像您习惯于在 C 中那样)。您或许还可以使用 fn:tokenize
和 for 循环来解决这个问题,但这会让事情变得相当复杂。
您的查询没有返回任何结果,因为只有一个结果(单元素字符串序列),但谓词仅每秒返回一次。
<小时/>改用正则表达式。此表达式匹配非空格 (\S
) 和空格 (\s
),并将这些模式替换为中间带有 x
的版本。最后的星号量词对于奇数个匹配组很重要(如您的示例中)。
replace("a b a b a b a b" , "(\S+)\s+(\S+\s*)", "$1x$2")
关于XPATH : replace every ohter whitespace,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18161780/