Последние несколько дней я пытался перезаписать содержимое XML-файла потока в Nifi с использованием ExecuteScript.
В основном я хотел бы добавить новый подэлемент (новый тег) в определенный тег и вставить некоторые значения взатем обновите содержимое само по себе.
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 для перезаписи содержимого XML в ExecuteScript в Jython.
И я получил следующую ошибку TypeError: «Объект NoneType не повторяется»
Я знаю, что ошибка происходит из части outputStream.write.Но я не знаю, как перезаписать содержимое.
Буду признателен, если кто-нибудь сможет научить меня, как мне обновлять xml-файл потока с помощью outputStream.write.
Спасибо.