2016-01-29 82 views
2

lxml在使用XML版本2.0時失敗並出現異常。lxml:XMLSyntaxError:不支持的版本'2.0'

測試:

class TestLXML(unittest.TestCase): 

    def test_lxml(self): 
     from lxml import etree 

     etree.fromstring('<?xml version="2.0" encoding="UTF-8" standalone="no"?><test>test</test>') 

結果:

Error 
Traceback (most recent call last): 
    File "/home/viator/coding/esb/mdmesb/packages/smev/core/request/test.py", line 33, in test_lxml 
    etree.fromstring('<?xml version="2.0" encoding="UTF-8" standalone="no"?><test>test</test>') 
    File "lxml.etree.pyx", line 3032, in lxml.etree.fromstring (src/lxml/lxml.etree.c:68121) 
    File "parser.pxi", line 1786, in lxml.etree._parseMemoryDocument (src/lxml/lxml.etree.c:102470) 
    File "parser.pxi", line 1674, in lxml.etree._parseDoc (src/lxml/lxml.etree.c:101299) 
    File "parser.pxi", line 1074, in lxml.etree._BaseParser._parseDoc (src/lxml/lxml.etree.c:96481) 
    File "parser.pxi", line 582, in lxml.etree._ParserContext._handleParseResultDoc (src/lxml/lxml.etree.c:91290) 
    File "parser.pxi", line 683, in lxml.etree._handleParseResult (src/lxml/lxml.etree.c:92476) 
    File "parser.pxi", line 622, in lxml.etree._raiseParseError (src/lxml/lxml.etree.c:91772) 
XMLSyntaxError: Unsupported version '2.0', line 1, column 19 

是否LXML不支持2.0版?我能做什麼?

回答

2

好吧,看起來沒有XML 2.0的正式規範 - 只是一個W3C工作組的信息規範,它明確指出:「XML安全工作組已同意不進一步推薦此規範XML 2.0規範作爲建議「。 (https://www.w3.org/TR/xml-c14n2/)。關於維基百科和Stackoverflow的「XML 2.0」的進一步寫作證實了這一點。因此,由於不存在正式的規範,因此沒有辦法像lxml那樣將產品質量,形式,嚴格的檢查庫讀取出來。

如果您的文檔與XML 1.1兼容,則在將文檔中的最初「2.0」替換爲「1.1」(將XML作爲字符串替換爲解析之前)。如果他們不是,你將不得不選擇另一個符合W3C規範的庫(或自己製作)。

一些Google搜索發現,沒有任何類似於任何庫在Python中支持的「XML 2.0」。另一個選擇是記錄您需要從XML 2.0獲得哪些功能(如果有),並創建一個XML預處理器來處理這些功能。