首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Django / Python从RESTful web服务中消费XML?

如何使用Django / Python从RESTful web服务中消费XML?
EN

Stack Overflow用户
提问于 2009-04-30 01:13:48
回答 3查看 9.8K关注 0票数 3

我应该使用PyXML还是标准库中的内容?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-04-30 01:19:01

ElementTree是作为标准Python库的一部分提供的。ElementTree是纯python,而cElementTree是更快的C实现:

代码语言:javascript
复制
# Try to use the C implementation first, falling back to python
try:
    from xml.etree import cElementTree as ElementTree
except ImportError, e:
    from xml.etree import ElementTree

下面是一个示例用法,其中我使用来自RESTful web服务的xml:

代码语言:javascript
复制
def find(*args, **kwargs):
    """Find a book in the collection specified"""

    search_args = [('access_key', api_key),]
    if not is_valid_collection(kwargs['collection']):
        return None
    kwargs.pop('collection')
    for key in kwargs:
        # Only the first keword is honored
        if kwargs[key]:
            search_args.append(('index1', key))
            search_args.append(('value1', kwargs[key]))
            break

    url = urllib.basejoin(api_url, '%s.xml' % 'books')
    data = urllib.urlencode(search_args)
    req = urllib2.urlopen(url, data)
    rdata = []
    chunk = 'xx'
    while chunk:
        chunk = req.read()
        if chunk:
            rdata.append(chunk)
    tree = ElementTree.fromstring(''.join(rdata))
    results = []
    for i, elem in enumerate(tree.getiterator('BookData')):
        results.append(
               {'isbn': elem.get('isbn'),
                'isbn13': elem.get('isbn13'),
                'title': elem.find('Title').text,
                'author': elem.find('AuthorsText').text,
                'publisher': elem.find('PublisherText').text,}
             )
    return results
票数 10
EN

Stack Overflow用户

发布于 2009-04-30 01:17:46

只要有可能,我总是更喜欢使用标准库。ElementTree在pythonistas中非常出名,因此您应该能够找到大量的示例。它的一部分也已经用C语言进行了优化,所以它的速度相当快。

http://docs.python.org/library/xml.etree.elementtree.html

票数 3
EN

Stack Overflow用户

发布于 2010-02-27 21:43:17

还有BeautifulSoup,它有一些人可能更喜欢的API。下面是一个例子,告诉你如何从Twitter的Public Timeline中提取出所有最受欢迎的推文:

代码语言:javascript
复制
from BeautifulSoup import BeautifulStoneSoup
import urllib

url = urllib.urlopen('http://twitter.com/statuses/public_timeline.xml').read()
favorited = []

soup = BeautifulStoneSoup(url)
statuses = soup.findAll('status')

for status in statuses:
    if status.find('favorited').contents != [u'false']:
        favorited.append(status)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/804992

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档