我正在尝试解析以下XML数据:

http://pastebin.com/UcbQQSM2

这只是我将要遇到的两种数据类型的示例。有所需地址信息的公司和无所需信息的公司。

从数据中,我需要收集3条信息:

1)公司名称

2)公司街

3)公司邮政编码

我可以使用以下代码执行此操作:

#Creates list of Company names
CompanyList = []
for company in xmldata.findall('company'):
    name = company.find('name').text
    CompanyList.append(name)

#Creates list of Company zipcodes
ZipcodeList = []
for company in xmldata.findall('company'):
    contact_data = company.find('contact-data')
    address1 = contact_data.find('addresses')
    for address2 in address1.findall('address'):
        ZipcodeList.append(address2.find('zip').text)

#Creates list of Company streets
StreetList = []
for company in xmldata.findall('company'):
    contact_data = company.find('contact-data')
    address1 = contact_data.find('addresses')
    for address2 in address1.findall('address'):
        StreetList.append(address2.find('street').text)


但是它并没有真正做到我想要的,并且我不知道该怎么做。我相信这将是某种“如果”陈述,但我不知道。

问题是我在哪里:

for address2 in address1.findall('address'):
    ZipcodeList.append(address2.find('zip').text)




for address2 in address1.findall('address'):
    StreetList.append(address2.find('street').text)


它仅将列表中实际上包含XML中列出的街道名称或邮政编码的地方添加到列表中,但是对于那些也没有列出该信息的公司,我需要一个地标,以便我的列表匹配。

我希望这是有道理的。让我知道是否需要添加更多信息。

但是,基本上,我正在尝试寻找一种方法来说明公司是否没有邮政编码/街道名称,并在字段中输入“无”。

任何帮助/指导表示赞赏。

最佳答案

好吧,我要做一件坏事,建议您使用条件(三元)运算符。

StreetList.append(address2.find('street').text if address2.find('street').text else 'None')


因此,该语句说如果** address2.find('street')不为空,则返回address2.find('street')。text,否则返回'None'。

另外,您可以创建一个新方法来执行相同的测试,然后在两个地方调用它,请注意我的python生锈了,但是应该使您接近:

def returnNoneIfEmpty(testText):
    if testText:
        return testText
    else:
        return 'None'


然后只需调用它:

StreetList.append(returnNoneIfEmpty(address2.find('street').text))

关于python - 需要帮助使用ElementTree解析XML,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14508213/

10-11 02:43
查看更多