在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>
我的编码有问题,还是这个错误?
感谢您的帮助。
答案 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 “)