2016-03-27 55 views
0

我在ElementTree中有xml。我试图找到迭代数据并将其保存到数据库的最佳方法。目前我正在使用iterparse 但是我一次只能打印一个元素,然后返回到开头并开始下一个元素。在Python中迭代ElementTree Django

如何将元素分配给变量,以便将数据处理到我的数据库?

def advertisers(request): 
    url = 'https://api.example.com/apikey' 
    xml = requests.get(url, stream=True) 
    tree = ElementTree.iterparse(xml.raw) 
    print('about to save to database') 
    for products, item in tree: 
    # Handl Data Here 
    # Save to database 
    return HttpResponse() 

这是我如何创建我的模型,但无法弄清楚如何访问响应中的数据。

Product.objects.create(product_id=?, product_name=?, product_url=?, advertiser=?, designer=?, image_url=?, price=?, commission=item.text) 
+0

您能否展示您正在尝试解析的示例XML示例?谢谢。 – alecxe

回答

0

我发现这个早了,我想这是你的post

<item id="0"> 
    <product_id> ... 
    <product_name> ... 
    <product_url> ... 
    <advertiser> ... 
    <designer> ... 
    <image_url> ... 
    <price> ... 
    <commission> ... 
</item> 

基于XML的,试试这个:

for item in tree.iter('item'): 
    product_id = item.find('product_id').text 
    product_name = item.find('product_name').text 
    product_url = item.find('product_url').text 
    advertiser = item.find('advertiser').text 
    designer = item.find('designer').text 
    image_url = item.find('image_url').text 
    price = item.find('price').text 
    commission = item.find('commission').text 
    product_to_save = Product.objects.create(product_id=product_id, product_name=product_name, product_url=product_url, advertiser=advertiser, designer=designer, image_url=image_url, price=price, commission=commission) 
    product_to_save.save() 

我没有测试它,但几乎应该工作。

+0

谢谢。我非常接近。我无法在任何地方找到?你有链接到它谈论访问树的地方吗?这工作,但它会很高兴阅读它。 – wuno

+0

超级,我建议这[链接](https://docs.python.org/2/library/xml.etree.elementtree.html)了解更多信息。 –

+0

谢谢你吨! – wuno