vb6.0 循环处理xml 数据_用Python操作XML

用Python操作XML

来源:https://hackingandslacking.com/dealing-with-xml-in-python-b577630294b0

作者:Todd Birchard

翻译:老齐

阅读本文大约需要4分钟


生活中充满了我们不想做的事情,作为一个开发者,可能比一般人对此更有体会。有时我们会因为一个不讲道理、缺少知识的甲方(或者说是老板、产品经理等)而浪费几个星期的时间。另外浪费时间的地方,就是我们需要处理XML。

在某些情况下,API需要以XML格式返回数据。我们可能会想,“我只需要导入Python标准的 XML包就行了,然后了解一些语法,就可以开始了。”我原来也是这么想的。今天,我们将使用XML ElementTree库完成有关操作,从中你会了解到实际情况并非如想象那样。

和往常一样,这样做的目的是希望能够避免某些人的痛苦。在XML成为你的问题之前,请随意把它放在你的后兜中,我也在这样做。

191f2a484574769d930d86091dd6c042.png

不会那么糟

让我们提前做一些准备,以避免后续可能遇到的混乱。

首先,你是不是认为,可以用点符号来表示树状对象的分支?很遗憾,这种操作不能在XML中实现。如果寻找一个父对象的子对象,parent.child根本不起作用(parent['child']也不起作用)。我希望你喜欢在绕着树兜圈子。

读取XML中某个项的值时,所显示的结果既不是该项的值,也不是该项的子项。相反,结果显示:,这种显示说明它是一类Python对象。我们可以使用.text来查看文本值,而不是查看XML元素。不过,祝你在另一件事上好运。

生成XML树

让我们来解决这个问题并生成一些XML树,假设我们从一个API响应开始。

import xml.etree.ElementTree as ET e = ET.fromstring(response.content)

如果要阅读XML文件,则必须读取该文件并以目录的方式显示出来,即使这与我们无关,也应该意识到读取文件和显示内容的不一致性,以避免未来的混淆:

e = ET.parse('data.xml') root = e.getroot()

在《跟老齐学Python:轻松入门》第6.7.1节,专门对操作XML进行了完整而详细的阐述,请参考阅读。

当我们遍历这棵树时,需要注意与XML数据交互的三种方式:

    Water    Frat    0         Urine    Ironic    1         Pretentious    Hipster    2
  • item.tag 返回tag的名称。对第一项运行此操作将返回beer和一个关联的URI。
  • item.attrib()返回指定项的属性和值({‘name’: ‘Bud Light’})
  • item.text返回介于打开和关闭标记之间的文本内容(如果该值存在的话)。

ebd0d19f83f995ada9325c3b3b23de01.png

查找

有几种方法可以在XML中找到指定的数据,其中最明显的是通过索引进行搜索。item[0][1]行得通,不过我觉得基于索引的搜索对你没有多大用处。

.find.findall方法

xml.etree.ElementTree库内置了.find.findall方法,可以让我们对树进行操作。作为循环的一部分,我们按元素名称搜索:

for beer in e.findall('beer'):     name = beer.get('name') # equivalent to .attrib() in this case    flavor = beer.find('flavor').text     print(name, " is ", flavor)Bud Light is Water PBR is Urine IPA is Pretentious

.iter()方法

我们可以使用.iter(),循环遍历所有出现的元素名。

for beertype in e.findall('beer'):     print(beertype)Frat Ironic Hipster

使用某种糟糕的循环

如果你和我一样,可能会跳过所有的文档,变得非常沮丧,创建一些像这样的垃圾:

for beer in e:     for properties in beer:     if item.tag == "{http://www.example.com/beermodel/resources}Type":     print(type)FratIronicHipster

这太糟糕了,但我不能说:你必须过你自己的生活。你就是你。

d8566e6b02e9f4699d5150c280251722.png

结论

看,XML很糟糕: 不到迫不得已,就不要使用它。如果你用到了它,要详细了解,就请阅读《跟老齐学Python:轻松入门》中的有关章节,本文仅仅是简要介绍,不能替代系统学习。

关注微信公众号:老齐教室。读深度文章,得精湛技艺,享绚丽人生。

970b4bb7752910ef04d0a81c1ddbd360.png

点击“阅读原文”,优惠购买《跟老齐学Python:轻松入门》

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值