python 如何从XML格式的文件中获取内容

十分像HTML, 也是一层一层,在主要信息外面包一些报头。XML 被设计用来传输和存储数据,但本身是不工作的,只是一种结构。

1. XML 基础

  1. 什么是 XML?
    XML 指可扩展标记语言(EXtensible Markup Language)
    XML 的设计宗旨是传输数据,而非显示数据

  2. XML 与 HTML 的主要差异
    XML 被设计为传输和存储数据,其焦点是数据的内容。
    HTML 被设计用来显示数据,其焦点是数据的外观。
    HTML 旨在显示信息,而 XML 旨在传输信息。

  3. XML用来做什么:
    通过 XML,数据能够存储在独立的 XML 文件中。这样你就可以专注于使用 HTML 进行布局和显示,并确保修改底层数据不再需要对 HTML 进行任何的改变。

  1. XML tree


    XML-tree
  2. XML用法,一对这样用

一边是document 信息,另一边是协同的schema contract。

XML-pair1
XML-pair2

2. 一个简单的过滤例子

  1. 直接取出来, find


    XML-parse-1
  2. 先把外面的大类取出来变为列表,然后再把内容从列表中取出。注意findall中括号的写法,要写出层级结构。

XML-parse-2
import xml.etree.ElementTree as ET

input = '''
<stuff>
    <users>
        <user x="2">
            <id>001</id>
            <name>Chuck</name>
        </user>
        <user x="7">
            <id>009</id>
            <name>Brent</name>
        </user>
    </users>
</stuff>'''

tree = ET.fromstring(input)

#这一句要把层级结构写出来,把uders中的user记录为一个个node,形成一个列表list
people = tree.findall('users/user')    

for person in people:
    print('name',person.find('name').text)
  1. 用urllib把数据从XML网页中取出,然后进行处理。
import urllib.request, urllib.parse, urllib.error
import xml.etree.ElementTree as ET

url = 'http://py4e-data.dr-chuck.net/comments_79228.xml'

print('Retrieving', url)
uh = urllib.request.urlopen(url)
data = uh.read()
print('Retrieved', len(data), 'characters')
tree = ET.fromstring(data)

comments_node = tree.findall('comments')
comment_node = comments_node[0].findall('comment')

total = 0
for node in comment_node:
    total = total + int(node.find('count').text)
print(total)

3. 时区问题

如需规定一个时区,您也可以通过在日期后加一个 "Z" 的方式,使用世界调整时间(UTC time)来输入一个日期 - 比如这样:<start>2002-09-24Z</start>


参考资料:

  1. w3 school, XML 教程
  2. coursera py4e 课程
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容