需要帮助解析XML与ElementTree的

问题描述:

我试图解析以下XML数据:需要帮助解析XML与ElementTree的

http://pastebin.com/UcbQQSM2

这仅仅是这2种类型的数据,我会碰到的一个例子。具有所需地址信息的公司和没有所需信息的公司。

从我需要收集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( '街道')。文字如果** address2.find( '街')不为空否则返回 '无'。

此外,你可以创建一个新的方法做同样的测试,并把它在这两个地方,注意我的蟒蛇是生锈的,但应该让你接近:

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

然后叫它:

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

谢谢,但似乎仍然只给我说已经有邮编的公司。对于那些不这样做的人来说,并不是“无”。我认为这是因为“在address1.findall地址2(‘地址’): ZipcodeList.append(address2.find(‘拉链’)文本)”具体来说,.findall()经过,只翻出公司那里有一个'邮编'。我需要它来做到这一点,但也为没有'zip'属性的公司放入'None'。除非,我错误地理解了如何使用你的答案的第一部分。 – 2013-01-24 17:31:59

+0

嗯,我需要看看findall的文档。 – Jamie

+0

它看起来像拉取所有匹配的元素,而不仅仅是具有值的元素。在测试它之前,我会打印出每个“空”的含义。 if语句假定文本将是一个空字符串,但可能情况并非如此。 – Jamie