2015-10-11 43 views
1

在Django中,我構建了一個腳本,該腳本創建xml對象以發出xml請求。這裏是我的代碼:XMLSyntaxError預期的開始標記,未找到'<'

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 

謝謝您的回答!

+2

prolog查看之前的單引號和轉義字符可疑我。我會再看看Doc Type的例子:http://lxml.de/1.3/parsing.html – Tim

回答

2

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>"' 

該字符串的開始是一個文字雙重(")。這在尖括號外的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工作的幫助肯定是另外一個問題。

+0

謝謝你的回答,我確實喜歡你說的,現在我有另一個錯誤'XMLSyntaxError空白需要在這裏,第1行,第19列' –

+0

@ZagorodniyOlexiy我已經添加了一些更多的細節。 –

+0

對於更多問題,我很抱歉。我找到了這個bug,謝謝! –

相關問題