OpenRefine中的forNonBlank函数

时间:2015-09-25 22:10:40

标签: openrefine

在OpenRefine的模板导出功能中使用forNonBlank时出错。

我想要在单独的dcterms中捕获具有多个主题的单元格:subject xml元素。例: Geology--Alberta--Coal Valley. // Geology, Structural. // Geology, Stratigraphic--Cretaceous.

我使用OpenRefine的Templating Export选项导出到XML,类似于此处描述的过程。

这个表达式很好用:

{{forEach(cells["dcterms:subject"].value.split(" // "), v, "<dcterms:subject>" + v + "</dcterms:subject>\n")}}

我明白了:

<dcterms:subject>Geology--Alberta--Coal Valley.</dcterms:subject> <dcterms:subject>Geology, Structural.</dcterms:subject> <dcterms:subject>Geology, Stratigraphic--Cretaceous.</dcterms:subject>

但是当使用forNonBlank时:

{{forNonBlank(cells["dcterms:subject"].value.split(" // "), v, "<dcterms:subject>" + v + "</dcterms:subject>\n", "")}}

我明白了:

<dcterms:subject>[Ljava.lang.String;@16657412</dcterms:subject>

我的编码有问题,还是这个错误?

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

forNonBlank不是迭代函数,因此函数:

forNonBlank(cells [“dcterms:subject”]。value.split(“//”),v,“”+ v +“\ n”,“”)

评估通过拆分创建的数组是否为空(整个数组,而不是数组中的每个项)并发现它不是空白将数组赋给变量'v'。

基本上'forNonBlank'的做法类似于'if'和'isNonBlank',而不是'forEach'和'isNonBlank'

你有多个选择可以做你想要的,但你需要在那里有一个迭代器。例如:

forEach(cells [“dcterms:subject”]。value.split(“//”),v,forNonBlank(v,w,“”+ w +“”,“”))。join(“/ n “)