python - 如何使用 Django/Python 从 RESTful Web 服务中使用 XML?

标签 python xml django rest

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

最佳答案

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

# 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 网络服务的 xml:

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

关于python - 如何使用 Django/Python 从 RESTful Web 服务中使用 XML?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/804992/

相关文章:

python - 在 Python Pandas DataFrame 中保留列顺序

python - 如何解决django中注释的sql解码错误

python - Pandas boolean 索引问题

python - 使用 admin_create_user 创建的 Cognito 帐户无法登录。是否有已知的修复方法?

xml - 使用 powershell 更新 xml 元素

xml - XQuery 如果在输入处理期间发生错误,则出现意外情况

Django Rest Framework 不保存对多对多的引用

python - Django 导入导出字段

python - 如何将装饰器应用于父类(super class)的方法?

python - 使用 lxml 将长 XML 标签拆分为多行