需要帮助使用ElementTree解析XML

时间:2013-01-24 16:05:11

标签: python xml

我正在尝试解析以下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)

但它并没有真正做到我想要的,我无法弄清楚如何做我想要的。我相信它会是某种类型的'if'陈述,但我不知道。

问题在于我所拥有的地方:

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中列出的街道名称或邮政编码的地方,但是我还需要一个地标,这些公司也没有列出这些信息,以便我的列表匹配。

我希望这是有道理的。如果我需要添加更多信息,请与我们联系。

但是,基本上,我试图找到一种方法来说明,如果公司没有邮政编码/街道名称,则填写“无”,如果有,则输入邮政编码/街道名称。

感谢任何帮助/指导。

1 个答案:

答案 0 :(得分:1)

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

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

所以这句话说明返回 address2.find('street')。text 如果** address2.find('street')不为空,否则返回'None'。

此外,您可以创建一个新方法来执行相同的测试并在两个地方调用它,注意我的python是生锈的,但应该让你关闭:

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

然后打电话给它:

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