如何跳过验证lxml中的URI?

时间:2013-09-09 06:59:23

标签: python xml lxml

我正在使用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

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

2 个答案:

答案 0 :(得分:3)

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

要解析xml尽管uris无效,你可以实例化lxml.etree.XMLParser recover参数设置为True,然后用它来解析文件:

from lxml import etree
recovering_parser = etree.XMLParser(recover=True)
xml = etree.parse("xmlfile.xml", parser=recovering_parser)
...

答案 1 :(得分:0)

如果您确定这些特定错误对您的用例不重要,您可以将其作为一个例子来捕获:

try:
   # process your tree here
   SomeFn()

except lxml.etree.XMLSyntaxError, e:
   print "Ignoring", e
   pass