У меня есть неправильный XML, который очень велик - в нем нет тега верхнего уровня и есть дубликаты атрибутов. Чтобы обойти это, я протестировал следующее решение на подмножестве моего искаженного XML, и оно отлично работает для добавления тега и автоматического удаления дублирующихся атрибутов, используя BeautifulSoup
.
import sys
from bs4 import BeautifulSoup
import xml.etree.ElementTree as ET
flow_file = sys.stdin.read()
try:
tree = ET.fromstring(flow_file)
sys.stdout.write(flow_file)
except:
flow_file = f"<dispatch>{flow_file}</dispatch>"
soup = BeautifulSoup(flow_file, 'xml')
sys.stdout.write(soup)
Однако, поскольку мой реальный файл настолько большой, он выдает ошибку памяти. Поскольку мне нужно (AFAICT) полный XML для добавления тегов верхнего уровня и удаления дубликатов, я не совсем уверен, как изменить мой код для обработки таких больших XML. Я видел несколько предложений по использованию lxml
и итерации, но мне не ясно, как это вписывается в мои потребности / процессы.
ETA: не уверен, что полезно, но весь смысл в том, чтобы очистить файл, чтобы он мог работать через процессор SplitXML
NiFi.