过去几天,我一直在尝试使用ExecuteScript覆盖Nifi中的流文件xml内容。
基本上,我想在特定标签内添加新的子元素(新标签),并在其中插入一些值,然后更新自身内容。
import xml.etree.ElementTree as ET
from org.apache.commons.io import IOUtils
from java.nio.charset import StandardCharsets
from org.apache.nifi.processor.io import StreamCallback
class PyStreamCallback(StreamCallback):
def __init__(self):
pass
def process(self, inputStream, outputStream):
text_content = IOUtils.toString(inputStream, StandardCharsets.UTF_8)
tree = ET.fromstring(text_content)
### My custom code to update the content ###
# Overwriting new_value as string elements within new_tag
for parent in tree.findall(".//parent"):
# Adding New Tag and its content as child element
new_tag = ET.SubElement(parent, 'newtag')
new_tag.text = str(new_value)
outputStream.write(bytearray(ET.dump(tree)))
flowFile = session.get()
if (flowFile != None):
flowFile = session.write(flowFile, PyStreamCallback())
session.transfer(flowFile, REL_SUCCESS)
session.commit()
我在ExecuteScript中找不到工作示例来覆盖Jython中ExecuteScript中的xml内容。
我收到以下TypeError:“ NoneType对象不可迭代”
我知道错误来自outputStream.write部分。 但是我不知道如何覆盖内容。
如果有人能教我如何使用outputStream.write更新xml流文件,我将不胜感激。
谢谢。