繁体   English   中英

使用Element树从python中的文件读取XML数据

[英]Reading XML data from a file in python using Element tree

我试图从我的xml文件打印数据,但使用ElementTree没有帮助。 数据正在成功写入文件'data.xml'但无法读取,控制台终止,退出代码为0而不显示任何数据。 甚至没有输入'data.findall'循环。

import urllib2
import xml.etree.ElementTree as ET

def main():
    search_url = "http://export.arxiv.org/api/query?search_query=all:social+science&start=0&max_results=10&sortBy=submittedDate&sortOrder=descending"
    file1 = open("data.xml", 'w')
    file1.write(''.join(map(str, urllib2.urlopen(search_url))))
    file1.close()
    print_data()    

def print_data():
    data = ET.parse('data.xml').getroot()
    for child in data.findall('entry'):
        print "Title :" + child.find('title').text + "\n"
        print "hahah"
        print "Summary :" + child.find('summary').text + "\n"
        print "Published On :" + child.find('published').text + "\n"
        for grab in child.find('link'):
            if grab.get('type') == 'application/pdf':
                print "Download Link :" + grab.get('href').text
                link = grab.get('href').text
                get_data = urllib2.urlopen(link)
                file2 = open('paper.pdf', 'w')
                file2.write(get_data.read())
                file2.close()
if __name__ == "__main__":
    main()

您需要将命名空间传递给findall以及标记名称。

替换这个:

for child in data.findall('entry'):

有了这个:

for child in data.findall('{http://www.w3.org/2005/Atom}entry'):

其中http://www.w3.org/2005/Atom是data.xml中根元素的xmlns属性的值

Element.findall()仅查找带有标记的元素,这些元素是当前元素的直接子元素。 Element.find()查找具有特定标记的第一个子元素,Element.text访问元素的文本内容。 Element.get()访问元素的属性: https//docs.python.org/2/library/xml.etree.elementtree.html

所以,我试着找到:

def print_data():
    data = ET.parse('data.xml').getroot()
    for child in data.findall('entry'):
        for entry in child.findall('entry'):
            print entry

并且这段代码找到所有条目,为什么很多条目都不是直接的孩子,我现在不用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM