好吧,这开始让我有点抓狂了。我已经尝试了几个 Python 的 xml/xpath 库,但无法找到一种简单的方法来获取臭味十足的“标题”元素。
最新的尝试如下所示(使用 Amara):
def view(req, url):
req.content_type = 'text/plain'
doc = amara.parse(urlopen(url))
for node in doc.xml_xpath('//title'):
req.write(str(node)+'\n')
但这什么也打印不出来。我的 XML 看起来像这样:http://programanddesign.com/feed/atom/ http://programanddesign.com/feed/atom/
如果我尝试//*
代替//title
它按预期返回所有内容。我知道 XML 有title
在那里,那么有什么问题吗?是命名空间还是什么?如果是这样,我该如何修复它?
似乎无法让它在没有前缀的情况下工作,但这确实有效:
def view(req, url):
req.content_type = 'text/plain'
doc = amara.parse(url, prefixes={'atom': 'http://www.w3.org/2005/Atom'})
req.write(str(doc.xml_xpath('//atom:title')))
您可能只需要考虑正在处理的文档的名称空间。
我建议查找如何处理 Amara 中的名称空间:
http://www.xml3k.org/Amara/Manual#namespaces http://www.xml3k.org/Amara/Manual#namespaces
编辑:使用您的代码片段我做了一些编辑。我不知道您使用的是哪个版本的 Amara,但根据我尝试尽可能适应它的文档:
def view(req, url):
req.content_type = 'text/plain'
ns = {u'f' : u'http://www.w3.org/2005/Atom',
u't' : u'http://purl.org/syndication/thread/1.0'}
doc = amara.parse(urlopen(url), prefixes=ns)
req.write(str(doc.xml_xpath(u'f:title')))
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)