我正在尝试将数据写入DynamoDB中的表。该项目是多个AWS AMI ID,属性是操作系统,漏洞风险级别和包。我有一个我在S3中读取的XML文件。有多个<IMAGE_ID>
标记,因此我使用findall()
方法来解析所有图像ID和子元素(操作系统,漏洞风险级别等)。当我尝试将此数据写入表时,我收到以下错误:
'list' object has no attribute 'text'
Code:
import boto3
import os
import lxml
from lxml import etree
def WriteItemToTable():
s3 = boto3.resource('s3')
bucket = 'XXXXXXXXXX'
key = 'XXXXX.xml'
dynamodb = boto3.resource('dynamodb')
table = dynamodb.Table('ExistingAMI')
os.chdir('/tmp')
s3.Bucket(bucket).download_file(key, 'XXXX.xml')
f = open("XXXX.xml","r")
tree = etree.parse(f)
for i in tree.find('HOST_LIST'):
image_id = i.findall('EC2_INFO/IMAGE_ID').text
os_id = i.findall('OPERATING_SYSTEM').text
sev_score = i.findall('VULN_INFO_LIST/VULN_INFO/CVSS_FINAL').text
patch_info = i.findall('VULN_INFO_LIST/VULN_INFO/RESULT').text
table.put_item(Item={'AMI_ID': image_id, 'OS':os_id, 'Severity': sev_score, 'Patches': patch_info,})
WriteItemToTable()
所以,显然findall()
方法没有响应.text.
但是,我不确定用什么方法来解析这些值。