Python 哪个XML解析器的错误报告最具可读性?
在python中,标准安装提供了许多方法来处理XML,甚至可以作为外部包,请参阅 对于我的项目,我使用的是Python 哪个XML解析器的错误报告最具可读性?,python,xml,xml-parsing,python-2.7,minidom,Python,Xml,Xml Parsing,Python 2.7,Minidom,在python中,标准安装提供了许多方法来处理XML,甚至可以作为外部包,请参阅 对于我的项目,我使用的是minidom,它可以满足我的需要,但错误报告相当简单,例如: no element found: line 7, column 0 这是正确的,但不是非常人类可读的,没有暗示可能需要哪个元素。由于缺少信息,我无法向用户报告错误 这只是一个示例,但在更多的情况下,minidom可能更详细,但不是。所以我需要一些详细的信息,一个足够详细的错误,我可以将解析错误传递给用户 哪种标准XML“处理
minidom
,它可以满足我的需要,但错误报告相当简单,例如:
no element found: line 7, column 0
这是正确的,但不是非常人类可读的,没有暗示可能需要哪个元素。由于缺少信息,我无法向用户报告错误
这只是一个示例,但在更多的情况下,minidom可能更详细,但不是。所以我需要一些详细的信息,一个足够详细的错误,我可以将解析错误传递给用户
哪种标准XML“处理解决方案”具有最详细的错误报告(如果没有),哪种XML支持外部软件包具有该信息?
用于解析的xml文件(在代码中用作config.xml
是:
<?xml version="1.0" encoding="UTF-8"?>
<widget xmlns="http://www.w3.org/ns/widgets">
<icon src="icon.png"/>
<content src="index.html"/>
<name>sample</name>
样品
我试图对上述链接中的所有解析器进行调查,看看哪一个具有最有用的错误报告,我停在lxml:
你为什么不试试呢?一个带有BeautifulSoup和lxml的virtualenv很快就建立起来了。@MartijnPieters可能这就是我要做的,但我认为我不应该重新发明轮子,先问问题。@MartijnPieters重新发明了遗嘱,尝试了一些解析器,看到了答案,关于lxml,您是对的。您也可以检查BeautifulSoup吗?@jterrace:BeautifulSoup使用python
HTMLParser
库,或者可选的lxml
或html5lib
解析器。这些是HTML解析器,而不是XML,这是有区别的。@jterrace:看看您是否在处理大文件LXML有一个限制,即它不会报告超过65535行的错误行号-@George幸运的是,在配置文件中不太可能有这么多行,感谢您指出这个限制
import xml.dom.minidom as md
md.parse("config.xml")
#xml.parsers.expat.ExpatError: no element found: line 7, column 0
import elementtree.ElementTree as ET
tree = ET.parse("config.xml")
#xml.parsers.expat.ExpatError: no element found: line 7, column 0
from xml import sax
parser = sax.make_parser()
parser.parse("config.xml")
#xml.sax._exceptions.SAXParseException: config.xml:7:0: no element found
import xml.etree.cElementTree as et
et.parse("config.xml")
#cElementTree.ParseError: no element found: line 7, column 0
import xml.dom.pulldom as pd
doc = pd.parse("config.xml")
for event, node in doc:
print event, node
#xml.sax._exceptions.SAXParseException: <unknown>:7:0: no element found
import lxml.etree
tree = lxml.etree.parse("config.xml")
#lxml.etree.XMLSyntaxError: Premature end of data in tag widget line 2, line 7, column 1
"Premature end of data in tag widget line 2, line 7, column 1"