【问题标题】:Which XML parser has the most human readable error reporting? [closed]哪个 XML 解析器具有最易读的错误报告? [关闭]
【发布时间】:2012-09-25 11:56:14
【问题描述】:

标准安装提供的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>

【问题讨论】:

  • 你为什么不试试呢?一个带有 BeautifulSoup 和 lxml 的 virtualenv 很快就设置好了。
  • @MartijnPieters 可能我会这样做,但我认为我不应该重新发明轮子并先问。
  • @MartijnPieters 重新发明了意志,尝试了一些解析器,看到答案,你对 lxml 是正确的。

标签: python xml xml-parsing python-2.7 minidom


【解决方案1】:

我尝试对上述链接中的所有解析器进行调查,以查看哪个具有最有用的错误报告,我停在 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"

【讨论】:

  • 你也可以看看 BeautifulSoup 吗?
  • @jterrace:BeautifulSoup 使用 python HTMLParser 库,或者可选的 lxmlhtml5lib 解析器。这些是 HTML 解析器,而不是 XML,并且有区别。
  • 如果您正在处理大文件,LXML 有一个限制,即它不会在超过 65535 行的错误中报告行号 - bugzilla.gnome.org/show_bug.cgi?id=325533
  • @George 幸运的是配置文件中不太可能得到这么多行,感谢指出限制
猜你喜欢
  • 1970-01-01
  • 2013-07-13
  • 2010-11-27
  • 2010-09-07
  • 2010-09-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-14
相关资源
最近更新 更多