2

标准安装提供的 python 中有很多方法来处理 XML,甚至更多作为外部包,请参阅http://wiki.python.org/moin/PythonXml

对于我使用的项目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>
4

1 回答 1

6

我尝试对上述链接中的所有解析器进行调查,以查看哪个具有最有用的错误报告,我停在 lxml:

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

结论是该lxml库具有上述列表中最好的错误报告:

"Premature end of data in tag widget line 2, line 7, column 1"
于 2012-09-26T11:57:29.033 回答