0

我正在使用 lxml 来解析一些 xml 文件。我不创建它们,我只是解析它们。一些文件包含命名空间的无效 uri。例如:

'D:\Path\To\some\local\file.xsl'

当我尝试处理它时出现错误:

lxml.etree.XMLSyntaxError: xmlns:xsi: 'D:\Path\To\some\local\file.xsl' is not a valid URI

有没有一种简单的方法可以用某些东西(任何东西,例如' http://www.googlefsdfsd.com/ ')替换任何无效的 uri?我想写一个正则表达式,但希望有一种更简单的方法。

4

2 回答 2

5

解析器不喜欢命名空间 uri 中的反斜杠。

要在 uri 无效的情况下解析 xml,您可以实例化一个lxml.etree.XMLParser并将recover参数设置为True,然后使用它来解析文件:

from lxml import etree
recovering_parser = etree.XMLParser(recover=True)
xml = etree.parse("xmlfile.xml", parser=recovering_parser)
...
于 2013-09-09T09:32:22.367 回答
0

如果您确定这些特定错误对您的用例不重要,您可以将其视为例外:

try:
   # process your tree here
   SomeFn()

except lxml.etree.XMLSyntaxError, e:
   print "Ignoring", e
   pass
于 2013-09-09T07:08:07.250 回答