使用 ElementTree (python) 编辑后,将修改后的 XML 文件上传到 google 云存储

Upload a modified XML file to google cloud storage after editting it with ElementTree (python)

我修改了一段代码,用于将两个或多个 xml 文件合并为一个。我在没有使用或存储文件的情况下在本地工作 google 云存储。

我想通过云功能使用它,除了将最终的 xml 文件上传到 google 云存储之外,这似乎大部分工作正常。

import os
import wget
import logging

from io import BytesIO
from google.cloud import storage
from xml.etree import ElementTree as ET

def merge(event, context):
    client = storage.Client()
    bucket = client.get_bucket('mybucket')
    test1 = bucket.blob("xml-file1.xml")
    inputxml1 = test1.download_as_string()
    root1 = ET.fromstring(inputxml1)
    test2 = bucket.blob("xml-file2.xml")
    inputxml2 = test2.download_as_string()
    root2 = ET.fromstring(inputxml2)
    copy_files = [e for e in root1.findall('./SHOPITEM')]
    src_files = set([e.find('./SHOPITEM') for e in copy_files])
    copy_files.extend([e for e in root2.findall('./SHOPITEM') if e.find('./CODE').text not in src_files])
    files = ET.Element('SHOP')
    files.extend(copy_files)
    blob = bucket.blob("test.xml")
    blob.upload_from_string(files)

我已经尝试了函数 .write 和 .tostring 但没有成功。

抱歉,问题不完整。我已经找到了解决方案,但我不记得收到的错误消息。 这是我的解决方案:

blob.upload_from_string(ET.tostring(files, encoding='UTF-8',xml_declaration=True, method='xml').decode('UTF-8'),content_type='application/xml')