Python从XML数据中获取ID

时间:2011-06-17 02:25:23

标签: python xml parsing

我是一个完整的python newb,我正在尝试解析由于发布请求而从谷歌返回的XML文档。

返回的文档与本文档中概述的文档类似 http://code.google.com/apis/documents/docs/3.0/developers_guide_protocol.html#Archives 其中显示“响应包含有关存档的信息。”

我感兴趣的唯一部分就是开头附近的Id属性。每个只有1个条目和1个id属性。我怎样才能将其提取出来以便以后使用?我已经和它斗争了一段时间,我觉得我已经尝试过从minidom到elementtree的所有东西。无论我做什么,我的搜索都会返回空白,循环不会迭代,或者方法丢失。非常感谢任何帮助。谢谢。

3 个答案:

答案 0 :(得分:2)

高度推荐Python包BeautifulSoup。这是 awesome 。下面是一个使用示例数据的简单示例(假设您已经安装了BeautifulSoup):

from BeautifulSoup import BeautifulSoup

data = """<?xml version='1.0' encoding='utf-8'?>
<entry xmlns='http://www.w3.org/2005/Atom'
xmlns:docs='http://schemas.google.com/docs/2007'
xmlns:gd='http://schemas.google.com/g/2005'>
<id>
https://docs.google.com/feeds/archive/-228SJEnnmwemsiDLLxmGeGygWrvW1tMZHHg6ARCy3Uj3SMH1GHlJ2scb8BcHSDDDUosQAocwBQOAKHOq3-0gmKA</id>
<published>2010-11-18T18:34:06.981Z</published>
<updated>2010-11-18T18:34:07.763Z</updated>
<app:edited xmlns:app='http://www.w3.org/2007/app'>
2010-11-18T18:34:07.763Z</app:edited>
<category scheme='http://schemas.google.com/g/2005#kind'
term='http://schemas.google.com/docs/2007#archive'
label='archive' />
<title>Document Archive - someuser@somedomain.com</title>
<link rel='self' type='application/atom+xml'
href='https://docs.google.com/feeds/default/private/archive/-228SJEnnmwemsiDLLxmGeGygWrvW1tMZHHg6ARCy3Uj3SMH1GHlJ2scb8BcHSDDDUosQAocwBQOAKHOq3-0gmKA' />
<link rel='edit' type='application/atom+xml'
href='https://docs.google.com/feeds/default/private/archive/-228SJEnnmwemsiDLLxmGeGygWrvW1tMZHHg6ARCy3Uj3SMH1GHlJ2scb8BcHSDDDUosQAocwBQOAKHOq3-0gmKA' />
<author>
    <name>someuser</name>
    <email>someuser@somedomain.com</email>
</author>
<docs:archiveNotify>someuser@somedomain.com</docs:archiveNotify>
<docs:archiveStatus>flattening</docs:archiveStatus>
<docs:archiveResourceId>
0Adj-hQNOVsTFSNDEkdk2221OTJfMWpxOGI5OWZu</docs:archiveResourceId>
<docs:archiveResourceId>
0Adj-hQNOVsTFZGZodGs2O72NFMllMQDN3a2Rq</docs:archiveResourceId>
<docs:archiveConversion source='application/vnd.google-apps.document'
target='text/plain' />
</entry>"""

soup = BeautifulSoup(data, fromEncoding='utf8')
print soup('id')[0].text

还有expat,它内置于Python中,但值得学习BeautifulSoup,因为它会更好地响应现实世界的XML(和HTML)。

答案 1 :(得分:1)

假设变量response包含返回的HTML文档的字符串表示,让我告诉您错误解决问题的方法

id = response.split("</id>")[0].split("<id>")[1]

正确的做法是使用xml.saxxml.domexpat,但就个人而言,除非我想要对异常情况进行强大的错误处理,否则我不会感到困扰回应包含意想不到的东西。


编辑:我忘了BeautifulSoup,这确实和特拉维斯描述的一样棒。

答案 2 :(得分:0)

如果您想使用minidom,可以执行以下操作(将gd.xml替换为xml输入):

from xml.dom import minidom

dom = minidom.parse("gd.xml")
id = dom.getElementsByTagName("id")[0].childNodes[0].nodeValue
print id

另外,我假设你的意思是id元素,而不是id属性。