2017-08-31 4 views
0

XMLファイルを動的に生成してダウンロードするにはDjangoにする必要があります。ダイナミックに生成されたxmlファイルをDjangoで文字エンコード情報でダウンロードして配信する

は、私は以下のコードでこれを行うことができますが、文字エンコーディング情報なし:

import xml.etree.ElementTree as ET 


def get_xml(): 
    my_xml = ET.Element('foo', attrib={'bar': 'bla'}) 
    my_str = ET.tostring(my_xml, 'utf-8', short_empty_elements=False) 
    return my_str.decode('utf-8') 

# my view 
def download_xml_file(request): 
    response = HttpResponse(get_xml(), content_type="application/xml") 
    response['Content-Disposition'] = 'inline; filename=myfile.xml' 
    return response 

は、私は以下のコードで情報をエンコードする文字を追加することができますが、最初のサーバ内のファイルへの書き込み:

def get_xml(): 
    my_xml = ET.Element('foo', attrib={'bar': 'bla'}) 
    tree = ET.ElementTree(my_xml) 
    fname = 'myfile.xml' 
    tree.write(fname, xml_declaration=True, encoding='utf-8') 
    with open(fname, 'r') as fh: 
     my_str = fh.read() 
    return my_str 

サーバーに最初に書き込むことなく、文字エンコード情報を使用してxmlファイルをダウンロードするにはどうすればよいですか?

答えて

0

私は質問を解決するために二つの方法が見つかりました:!

1)は、文字列などの情報をエンコードする文字(当たり前)連結します

def get_xml(): 
    my_xml = ET.Element('foo', attrib={'bar': 'bla'}) 
    my_str = ET.tostring(my_xml, 'utf-8', short_empty_elements=False) 
    enc = '<?xml version="1.0" encoding="utf-8"?>' 
    return enc += my_str.decode('utf-8') 

2)xml.dom.minidom.parseStringxml.dom.minidom.Node.toxmlを使用します。

def get_xml(): 
    my_xml = ET.Element('foo', attrib={'bar': 'bla'}) 
    my_str = ET.tostring(my_xml, 'utf-8', short_empty_elements=False) 
    return xml.dom.minidom.parseString(my_str).toxml(encoding='utf-8') 
関連する問題