Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何跳过在lxml中验证URI?_Python_Xml_Lxml - Fatal编程技术网

Python 如何跳过在lxml中验证URI?

Python 如何跳过在lxml中验证URI?,python,xml,lxml,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替换为某些内容(任何内容,例如“”)?我曾想过编写一个正则表达式,但希望有

我正在使用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替换为某些内容(任何内容,例如“”)?我曾想过编写一个正则表达式,但希望有一个更简单的方法。

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

try:
   # process your tree here
   SomeFn()

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

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

try:
   # process your tree here
   SomeFn()

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

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

要在URI无效的情况下解析xml,可以将
recover
参数设置为
True
实例化,然后使用该参数解析文件:

从lxml导入etree
正在恢复\u parser=etree.XMLParser(recover=True)
xml=etree.parse(“xmlfile.xml”,parser=recovering\u parser)
...

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

要在URI无效的情况下解析xml,可以将
recover
参数设置为
True
实例化,然后使用该参数解析文件:

从lxml导入etree
正在恢复\u parser=etree.XMLParser(recover=True)
xml=etree.parse(“xmlfile.xml”,parser=recovering\u parser)
...

什么是googlefsdfsd.com/?对我来说它看起来很破没关系。它不一定是一个有效的url,只是一个url(不是本地文件名的东西)。哦,好的,我现在明白了什么是googlefsdfsd.com/?对我来说它看起来很破没关系。它不一定是一个有效的url,只是一个url(不是本地文件名的东西)。哦,好的,我现在明白了在处理树时不会发生错误。包含反斜杠的名称空间uri在解析文档时会导致错误,因此您甚至无法找到树,捕获错误不会有帮助。那么您可能需要使用
r'D:\Path\to\some\local\file.xsl'
'D:\\Path\\to\\some\\local\\file.xsl'
'D:/Path/to/some/local/file.xsl'
或可能的
'file:D:\Path\to\some\local\file.xsl'
URI不在python代码中,它们在xml文件中,因此在它们前面加上
r
或双转义反斜杠没有任何意义(我不认为将所有文件更改为替换反斜杠是一种选择-OP只是想解析文档)。总是有一个简单的选择,就是只报告XML无效-这是由于无效的URI造成的,因此应该真正解决而不是解决。处理树时不会发生错误。包含反斜杠的名称空间uri在解析文档时会导致错误,因此您甚至无法找到树,捕获错误不会有帮助。那么您可能需要使用
r'D:\Path\to\some\local\file.xsl'
'D:\\Path\\to\\some\\local\\file.xsl'
'D:/Path/to/some/local/file.xsl'
或可能的
'file:D:\Path\to\some\local\file.xsl'
URI不在python代码中,它们在xml文件中,因此在它们前面加上
r
或双转义反斜杠没有任何意义(我不认为将所有文件更改为替换反斜杠是一种选择-OP只是想解析文档)。总是有一个简单的选择,就是只报告XML是无效的-这是由于无效的URI造成的,所以应该真正解决这个问题,而不是解决这个问题。