Python 表达在 XML 文档中创建尽可能多的标签的 GREL 行的方法是什么?

What is the Python way to express a GREL line that is creating as many tags as needed in an XML document?

我正在使用 Open Refine 做一些我知道 Python 可以做的事情。我正在使用它将 csv 转换为 XML 元数据文档。我能弄明白其中的大部分内容,但让我感到困惑的一件事是 GREL 行:

{{forEach(cells["subjectTopicsLocal"].value.split('; '), v, '<subject authority="local"><topic>'+v.escape("xml")+'</topic></subject>')}}

这对我来说很漂亮。我的 Excel 电子表格中有一个 "subject" 字段。我的志愿者输入关键字,用“;”分隔。我不知道他们会想出多少关键字,有时只有一个。该 GREL 行为每个创建的术语创建一个新的 <subject authority="local"><topic></topic></subject>,当然会将其滑入该字段。

我知道必须有一个 Python 表达式可以做到这一点。有人可以为此推荐最佳做法吗?非常感谢!

基本上您想在 Python 中使用 'split' 将主题字段中的字符串转换为 Python 列表,然后您可以遍历该列表。

因此假设您已经从 csv/excel 文档中的一行中读取了 'subject' 字段的内容并将其分配给字符串变量 'subj' 您可以执行类似:

subjList = subj.split(";")
for subject in subjList:
  #do what you need to do to output 'subject' in an xml element here

此 Python 表达式等同于您的 GREL 表达式:

['<subject authority="local"><topic>'+escape(v)+'</topic></subject>') for v in split(value,'; ')]

它将创建一个包含您的主题的 XML 片段数组。它假定您已经创建或导入了适当的 escape 函数,例如

from xml.sax.saxutils import escape