2016-01-29 77 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预处理器来处理这些功能。