Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xquery 如何在fn:tokenize中跳过拆分模式相同值的拆分功能_Xquery_Marklogic_Stringtokenizer - Fatal编程技术网

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

Xquery 如何在fn:tokenize中跳过拆分模式相同值的拆分功能,xquery,marklogic,stringtokenizer,Xquery,Marklogic,Stringtokenizer,我正在尝试拆分字符串(使用“|”或“,”分隔的分隔字符串)。我使用fn:tokenize来实现这一点。考虑下面的示例文本,其中我有4列文本,其中在第三列中得到与分割模式相同的值。 fn:tokenize(“column1 | column2 | | | column4”和“|”) 上述代码的结果为我提供了5个值,其中2个为空: column1 column2 column4 我还尝试在column3值中添加引号,但这也没有给我预期的结果。在MarkLogic 9中,您可以定义自己的自定义标

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

fn:tokenize(“column1 | column2 | | | column4”和“|”)

上述代码的结果为我提供了5个值,其中2个为空:

column1
column2


column4

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

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

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

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

column1
|
|
column4

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

在我看来,上面的内容就像是5列的分隔字符串,因为您有4个管道符号。不是吗?不,它是一个4列字符串。在第三列中,我将管道符号作为一个值。在第三栏,我面对的是问题。好的,明白了。是的,标记化是不够的。您将需要一个递归解决方案,该解决方案可以去除位,并预测引用值中是否存在管道符号。您需要更精确地指定问题。例如,
| | | | |
一列包含
| |
,或者两列包含
|
?在我看来,这是一个设计拙劣的数据语法。