How to consume XML from RESTful web services using Django / Python?

后端 未结 3 1868
感动是毒
感动是毒 2021-02-04 21:20

Should I use PyXML or what\'s in the standard library?

3条回答
  •  情歌与酒
    2021-02-04 22:20

    ElementTree is provided as part of the standard Python libs. ElementTree is pure python, and cElementTree is the faster C implementation:

    # 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
    

    Here's an example usage, where I'm consuming xml from a RESTful web service:

    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
    

提交回复
热议问题