在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
感谢您的回答!
答案 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工作的任何帮助都是另一个问题。