如何跳过fn:tokenize中相同分割模式值的分割功能

时间:2017-05-16 09:58:25

标签: xquery marklogic stringtokenizer

我正在尝试拆分字符串(使用“|”或“,”分隔的分隔字符串)。我用fn:tokenize来实现这个。考虑下面的示例文本,其中我有4列文本,其中在第3列中我得到与拆分模式相同的值。

fn:tokenize("column1|column2|||column4", "|")

上面代码的结果给出了5个值,其中2个为空:

column1
column2


column4

我也试过在column3值中添加引号,这也没有给我预期的结果。

2 个答案:

答案 0 :(得分:0)

在MarkLogic 9中,您可以定义自己的自定义标记生成器。

答案 1 :(得分:0)

除了fn:tokenize按正则表达式拆分并因此需要转义|之外,这似乎是一种可怕的数据格式。将Michael Kay指出的问题分开并期望||将始终指示以|开头的新字段,并且从不存在空列,您可以应用简单的hack并将管道符号替换为另一个字符,然后转回来。这要求您在数据集中不允许找到Unicode范围内的某些字符。

for $token in fn:tokenize(fn:replace("column1|||||column4", "\|\|", "|_"), "\|")
return fn:replace($token, "_", "|")

结果:

column1
|
|
column4

如果我所做的假设不适用于您的用例,您将必须确定另一组类似的严格假设,以便能够解析您的内容。