xml解析使用python:xml.etree.cElementTree失败

时间:2013-01-04 17:31:09

标签: python xml parsing

我使用

下载xml文件
wget -O example.xml http://gdata.youtube.com/feeds/api/videos?q=samsung+mobile&orderby=relevance&start-index=1&max-results=5&v=2

我想获取视频ID,例如" x_HFR3Hmv44"来自x_HFR3Hmv44 发表时间2010-10-25T20:42:22.000Z

但是,我未能使用以下代码

import xml.etree.cElementTree as et

sxml = open('example.xml', 'r').read()
tree=et.fromstring(sxml)
for el in tree.findall('published'):
    print el.getchildren()[1].text

但我失败了, 输出是什么

谁能告诉我哪里错了?谢谢!

是不是因为xml文件不能由xml.etree.cElementTree处理? 有像这样的标签,而yt没有在文件中定义

2 个答案:

答案 0 :(得分:1)

很难确切地说,但我认为你有两个问题:

  1. Element.findall()仅根据the docs找到该元素的直接子元素。

  2. 您需要指定此标记所属的命名空间。例如:

    列表(tree.iter( '{} http://www.w3.org/2005/Atom出版'))

答案 1 :(得分:1)

您只是对XML结构感到困惑。将prettyprint=true添加到查询字符串以获取缩进的xml,这将使您更容易阅读。另请咨询YouTube's element reference links以了解会发生什么。

这将帮助您入门:

from urllib import urlopen
import xml.etree.cElementTree as ET

url = 'http://gdata.youtube.com/feeds/api/videos?q=samsung+mobile&orderby=relevance&start-index=1&max-results=5&v=2'

root = ET.parse(urlopen(url))

def qname(prefix, name, map={'atom':'http://www.w3.org/2005/Atom'}):
    """Helper function for namespaced element names"""
    return '{{{}}}{}'.format(map[prefix], name)


for e in root.findall(qname('atom','entry')):
    print e.findtext(qname('atom','id')), e.findtext(qname('atom','published'))