我正在尝试使用Python来解析XML文件,以从XML提要中获取标题,作者,URL和摘要.然后我确保我们收集数据的XML是这样的:
<?xml version="1.0" encoding="utf-8"?>
<Feed xmlns="http://www.w3.org/2005/Atom"
xmlns:Grddl="http://www.w3.org/2003/g/data-view#"
Grddl:transformation="2turtle_xslt-1.0.xsl">
<title>Our Site RSS</title>
<link href="http://www.oursite.com" />
<updated>2013-08-14T20:05:08-04:00</updated>
<id>urn:uuid:c60d7202-9a58-46a6-9fca-f804s879f5ebc</id>
<rights>
Original content available for non-commercial use under a Creative
Commons license (Attribution-NonCommercial-NoDerivs 3.0 Unported),
except where noted.
</rights>
<entry>
<title>Headline #1</title>
<author>
<name>John Smith</name>
</author>
<link rel="alternate"
href="http://www.oursite.com/our-slug/" />
<id>1234</id>
<updated>2013-08-13T23:45:43-04:00</updated>
<summary type="html">
Here is a summary of our story
</summary>
</entry>
<entry>
<title>Headline #2</title>
<author>
<name>John Smith</name>
</author>
<link rel="alternate"
href="http://www.oursite.com/our-slug-2/" />
<id>1235</id>
<updated>2013-08-13T23:45:43-04:00</updated>
<summary type="html">
Here is a summary of our second story
</summary>
</entry>
我的代码是:
import xml.etree.ElementTree as ET
tree = ET.parse('data.xml')
root = tree.getroot()
for child in root:
print child.tag
当Python打印child.tag时,标签不是标签“entry”,而是“{http://www.w3.org/2005/Atom} entry”.我试过用:
for entry in root.findall('entry'):
但这不起作用,因为条目标记包含作为根标记一部分的w3 url.此外,让root的孙子显示他们的标签为“{http://www.w3.org/2005/Atom}作者”
我无法更改XML,但如何修改它(将root设置为)并重新保存或更改我的代码以便root.findall(‘entry’)有效?
解决方法:
这是标准的ElementTree行为.如果您要搜索的标记是在命名空间中声明的,则在搜索这些标记时必须指定该命名空间.但是,你可以这样做:
import xml.etree.ElementTree as ET
tree = ET.parse('data.xml')
root = tree.getroot()
def prepend_ns(s):
return '{http://www.w3.org/2005/Atom}' + s
for entry in root.findall(prepend_ns('entry')):
print 'Entry:'
print ' Title: ' + entry.find(prepend_ns('title')).text
print ' Author: ' + entry.find(prepend_ns('author')).find(prepend_ns('name')).text
print ' URL: ' + entry.find(prepend_ns('link')).attrib['href']
print ' Summary: ' + entry.find(prepend_ns('summary')).text
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。