我正在尝试从我的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()
答案 0 :(得分:0)
您需要将命名空间传递给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属性的值答案 1 :(得分:0)
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
并且此代码查找所有条目,为什么很多条目不是直接子项,我现在不用。