lxml: XMLSyntaxError: Unsupported version '2.0'
lxml: XMLSyntaxError: Unsupported version '2.0'
lxml
使用 XML 版本 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版本吗?我能做什么?
好吧,XML 2.0 似乎没有正式的规范 - 只有 W3C 工作组信息规范,其中明确说明 "The XML Security Working Group has agreed not to progress this Canonical XML 2.0 specification further as a Recommendation"。 (https://www.w3.org/TR/xml-c14n2/)。 Wikpedia 和 Whosebug 上关于 "XML 2.0" 的进一步报道证实了这一点。
因此,由于不存在正式的规范,所以没有办法像 lxml 那样具有生产质量、正式、严格检查的库可以读取它。
如果您的文档与 XML 1.1 兼容,只需将文档中的初始“2.0”替换为“1.1”- 在解析之前将 XML 视为字符串。如果不是,您将不得不选择另一个与信息丰富的 W3C 规范一起工作的库(或制作您自己的规范)。
一些谷歌搜索发现在 Python 中没有任何图书馆支持像 "XML 2.0" 这样的东西。另一种选择是记录您需要 XML 2.0 的哪些功能(如果有),并创建一个 XML 预处理器来处理这些功能。
lxml
使用 XML 版本 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版本吗?我能做什么?
好吧,XML 2.0 似乎没有正式的规范 - 只有 W3C 工作组信息规范,其中明确说明 "The XML Security Working Group has agreed not to progress this Canonical XML 2.0 specification further as a Recommendation"。 (https://www.w3.org/TR/xml-c14n2/)。 Wikpedia 和 Whosebug 上关于 "XML 2.0" 的进一步报道证实了这一点。
因此,由于不存在正式的规范,所以没有办法像 lxml 那样具有生产质量、正式、严格检查的库可以读取它。
如果您的文档与 XML 1.1 兼容,只需将文档中的初始“2.0”替换为“1.1”- 在解析之前将 XML 视为字符串。如果不是,您将不得不选择另一个与信息丰富的 W3C 规范一起工作的库(或制作您自己的规范)。
一些谷歌搜索发现在 Python 中没有任何图书馆支持像 "XML 2.0" 这样的东西。另一种选择是记录您需要 XML 2.0 的哪些功能(如果有),并创建一个 XML 预处理器来处理这些功能。