Python Django XML无法加载外部实体

Python Django XML无法加载外部实体,python,django,Python,Django,我收到一个名为xml的参数,它包含一个xml文档。这就是我尝试过的 from lxml.cssselect import CSSSelector, etree from lxml.etree import fromstring if request.POST: parser = etree.XMLParser(ns_clean=True, recover=True) h = etree.parse(request.POST['xml'], parser) retur

我收到一个名为xml的参数,它包含一个xml文档。这就是我尝试过的

from lxml.cssselect import CSSSelector, etree
from lxml.etree import fromstring

if request.POST:

    parser = etree.XMLParser(ns_clean=True, recover=True)
    h = etree.parse(request.POST['xml'], parser)

    return HttpResponse(h)
但我得到了一个错误:

[Fri Apr 05 09:50:13 2013] [error] IOError: Error reading file '<?xml version="1.0" encoding="ISO-8859-1"?>
[Fri Apr 05 09:50:13 2013] [error] <delivery_receipt>
[Fri Apr 05 09:50:13 2013] [error]     <version>1.1</version>
[Fri Apr 05 09:50:13 2013] [error]     <msisdn>447777111111</msisdn>
[Fri Apr 05 09:50:13 2013] [error]     <submission_ref>12345678901234567890123456789012</submission_ref>
[Fri Apr 05 09:50:13 2013] [error]     <status>Delivered</status>
[Fri Apr 05 09:50:13 2013] [error]     <reason>4</reason>
[Fri Apr 05 09:50:13 2013] [error]     <gmt_timestamp>20130405095100</gmt_timestamp>
[Fri Apr 05 09:50:13 2013] [error]     <retry>0</retry>
[Fri Apr 05 09:50:13 2013] [error] </delivery_receipt>': failed to load external entity "<?xml version="1.0" encoding="ISO-8859-1"?>
[Fri Apr 05 09:50:13 2013] [error] <delivery_receipt>
[Fri Apr 05 09:50:13 2013] [error]     <version>1.1</version>
[Fri Apr 05 09:50:13 2013] [error]     <msisdn>447777111111</msisdn>
[Fri Apr 05 09:50:13 2013] [error]     <submission_ref>12345678901234567890123456789012</submission_ref>
[Fri Apr 05 09:50:13 2013][error]IOError:读取文件时出错'
[Fri Apr 05 09:50:13 2013][错误]
[Fri Apr 05 09:50:13 2013][错误]1.1
[Fri Apr 05 09:50:13 2013][错误]447777111111
[Fri Apr 05 09:50:13 2013][错误]1234567890012345678901234567890123456789012
[Fri Apr 05 09:50:13 2013][错误]已交付
[Fri Apr 05 09:50:13 2013][错误]4
[Fri Apr 05 09:50:13 2013][错误]20130405095100
[Fri Apr 05 09:50:13 2013][错误]0
[Fri Apr 05 09:50:13 2013][error]':未能加载外部实体”
[Fri Apr 05 09:50:13 2013][错误]
[Fri Apr 05 09:50:13 2013][错误]1.1
[Fri Apr 05 09:50:13 2013][错误]447777111111
[Fri Apr 05 09:50:13 2013][错误]1234567890012345678901234567890123456789012


有什么想法吗?谢谢:)

请求。默认情况下,POST
返回unicode字符串。下一个问题与您提供的编码与您提供的文档中声明的编码不匹配有关

doc = request.POST.get('xml','')
if not doc:
  raise Exception()
h = etree.XML(doc.encode('ascii'), parser)

etree.parse
需要一个文件名(或文件对象)。没有名为

的文件。您好,@Pavel Anossov感谢您的回复,我尝试了这个方法,但得到了“不支持带有编码声明的Unicode字符串”“使用fromstring函数。
etree.parse
也将获取URL。Hi@MattH yes它似乎给出了相同的错误:不支持带有编码声明的Unicode字符串。但正如您所说的,您的xml是否包含编码声明,如果是,则可能是问题所在,请查看此Hi,因为不支持带有编码声明的Unicode字符串:(
from lxml.cssselect import CSSSelector, etree
from lxml.etree import fromstring

if request.POST:

    parser = etree.XMLParser(ns_clean=True, recover=True)
    parser.feed(request.POST['xml'])
    h = parser.close()
    ...
h = fromstring(request.POST['xml'], parser=parser)
h = etree.XML(request.POST['xml'], parser=parser)