XMLSyntaxError期望开始标记,'<'未找到

时间:2015-10-11 22:48:45

标签: xml django lxml

在Django中,我构建了一个创建xml对象的脚本来发出xml请求。这是我的代码:

my_xml = etree.XML('''\"<?xml version="1.0"? encoding="UTF-8"?> <!DOCTYPE peticion SYSTEM "http://example.com"> ]><request></request>"''')
my_xml_doc = etree.ElementTree(my_xml)
my_tipe = etree.SubElement(my_xml, "element")
my_tipe.text = 'Element'
my_xml_serialize = etree.parse(my_xml)
my_request = urllib2.Request(url, my_xml_serialize)

但是django会抛出错误

XMLSyntaxError Start tag expected, '<' not found, line 1, column 1

感谢您的回答!

1 个答案:

答案 0 :(得分:3)

Python is doing string concatenation behind the scenes。观察:

> "x"'f'=='xf'
True

所以你的字符串:

'''\"<?xml version="1.0"? encoding="UTF-8"?> <!DOCTYPE peticion SYSTEM "http://example.com"> ]><request></request>"'''

实际上计算为:

''+'\"<?xml version="1.0"? encoding="UTF-8"?> <!DOCTYPE peticion SYSTEM "http://example.com"> ]><request></request>"'+''

是:

'\"<?xml version="1.0"? encoding="UTF-8"?> <!DOCTYPE peticion SYSTEM "http://example.com"> ]><request></request>"'

该字符串的开头是一个文字的双重quoate(")。这在尖括号之外的XML中无效。因此错误。

将其更改为以下内容,它应该可以正常工作:

'<?xml version="1.0"? encoding="UTF-8"?> <!DOCTYPE peticion SYSTEM "http://example.com"> ]><request></request>'

编辑:罚款是夸大其辞,原始问题是字符串连接。但是,经过简短而慷慨的检查后,您的实际XML文档中存在许多问题,包括语法错误,错误指定的DOCTYPE以及实际上不符合该DOCTYPE的文档。

将文档一直修剪回:

'<?xml version="1.0" encoding="UTF-8"?><request></request>'

将允许代码运行,但是让DOCTYPE工作的任何帮助都是另一个问题。