[英]Reading XML from S3 Python AWS Lambda
I am trying to read a file in an s3 bucket and extract elements with xml minidom in a python AWS Lambda function.我正在尝试读取 s3 存储桶中的文件,并在 python AWS Lambda 函数中使用 xml minidom 提取元素。 I keep getting error - "errorMessage": "Unable to marshal response: Object of type Element is not JSON serializable".
我不断收到错误 - “errorMessage”:“无法编组响应:元素类型的对象不是 JSON 可序列化的”。
import json
from xml.dom import minidom
import boto3
s3 = boto3.resource('s3')
def lambda_handler(event, context):
bucketname = 'mybucket'
filename = 'myfile.xml'
obj = s3.Object(bucketname, filename)
file_data = obj.get()['Body'].read()
#parse xml
xmldoc = minidom.parseString(file_data)
message_1 = xmldoc.getElementsByTagName('id')
#return
return {
"bucketname": bucketname,
"file_data": file_data,
"id": message_1
}
getElementsByTagName
returns a NodeList
which contains Elements
which in turn aren't JSON serializable. getElementsByTagName
返回一个包含Elements
的NodeList
,而Elements
又不是 JSON 可序列化的。 If you expect there to only ever be 1 id
element in your xml, you can do如果您希望 xml 中只有 1 个
id
元素,您可以这样做
return {
"bucketname": bucketname,
"file_data": file_data,
"id": message_1.item(0).firstChild.data
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.